[React] Hook | useMemo
์ปดํฌ๋ํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ํ๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง์ด ๋ ๋๋ง๋ค ๋ฆฌ๋ ๋๋ง์ ํ๋ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ทธ๋ฌ๋ ๋๋ฌด ์ฆ์ ๋ฆฌ๋ ๋๋ง์ ์ฑ์ ์ข์ง ์์ ์ฑ๋ฅ์ ๋ผ์น๋ค.
[๊ทธ๋ฆผ] ๋๋ฌด ๋ง์ ๋ ๋๋ง์ ์ฑ์ ์ ์ข์ ์ฑ๋ฅ์ ๋ฏธ์น๋ ๊ทน๋จ์ ์ธ ์
๋ ๋๋ง ์ต์ ํ๋ฅผ ์ํ Hook๋ ์กด์ฌํ๋๋ฐ, useCallback๊ณผ useMemo๊ฐ ๋ฐ๋ก ๊ทธ ์ญํ ์ ํ๋ Hook์ด๋ค.
๐ useMemo๋?
- ํน์ ๊ฐ(value)๋ฅผ ์ฌ์ฌ์ฉํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ Hook
function Calculator({value}){
const result = calculate(value);
return <>
<div>
{result}
</div>
</>;
}
ํด๋น ์ปดํฌ๋ํธ๋ props๋ก ๋์ด์จ value๊ฐ์ calculate๋ผ๋ ํจ์์ ์ธ์๋ก ๋๊ฒจ์ result ๊ฐ์ ๊ตฌํ ํ,
๋ง์ฝ ์ฌ๊ธฐ์ calculate๊ฐ ๋ด๋ถ์ ์ผ๋ก ๋ณต์กํ ์ฐ์ฐ์ ํด์ผ ํ๋ ํจ์๋ผ ๊ณ์ฐ๋ ๊ฐ์ ๋ฐํํ๋ ๋ฐ์ ์๊ฐ์ด ๋ช ์ด ์ด์ ๊ฑธ๋ฆฐ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ๊ทธ๋ ๋ค๋ฉด ํด๋น ์ปดํฌ๋ํธ๋ ๋ ๋๋ง์ ํ ๋๋ง๋ค ์ด ํจ์๋ฅผ ๊ณ์ํด์ ํธ์ถํ ๊ฒ์ด๊ณ , ๊ทธ ๋๋ง๋ค ์๊ฐ์ด ๋ช ์ด ์ด์ ์์๊ฐ ๋ ๊ฒ์ด๋ค. ์ด ๋ช ์ด์ ์ง์ฐ์ ๋ ๋๋ง์๋ ์ํฅ์ ๋ฏธ์น ๊ฒ์ด๊ณ , ์ฌ์ฉ์๋ โ์ฑ์ ๋ก๋ฉ ์๋๊ฐ ๋๋ฆฌ๋ค?โ๋ผ๋ ์๊ฐ์ ํ๊ฒ ๋ ๊ฒ์ด๋ค.
/* useMemo๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๊ผญ import ํ๊ธฐ */
import { useMemo } from "react";
function Calculator({value}){
const result = useMemo(() => calculate(value), [value]);
return <>
<div>
{result}
</div>
</>;
}
์ฌ๊ธฐ value ๋ฅผ ์ธ์๋ก ๋ฐ๋ Calculator ์ปดํฌ๋ํธ๊ฐ ์๋ค. value ๋ ์ผ์ข ์ ๊ฐ์ผ๋ก์, ์ด ๊ฐ์ด ๊ณ์ ๋ฐ๋๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์ด์ฉ ์ ์๊ฒ ์ง๋ง, ๋ ๋๋ง์ ํ ๋๋ง๋ค ์ด value๊ฐ์ด ๊ณ์ ๋ฐ๋๋ ๊ฒ ์๋๋ผ๊ณ ์๊ฐํด ๋ณด์. ๊ทธ๋ผ ์ด ๊ฐ์ ์ด๋๊ฐ์ ์ ์ฅ์ ํด๋๋ค๊ฐ ๋ค์ ๊บผ๋ด์ ์ธ ์๋ง ์๋ค๋ฉด ๊ตณ์ด calculate ํจ์๋ฅผ ํธ์ถํ ํ์๋ ์์ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ useMemo Hook์ ์ฌ์ฉํ ์ ์๋ค.
์ด๋ฐ ์์ผ๋ก useMemo๋ฅผ ํธ์ถํ์ฌ calculate๋ฅผ ๊ฐ์ธ์ฃผ๋ฉด, ์ด์ ์ ๊ตฌ์ถ๋ ๋ ๋๋ง๊ณผ ์๋ก์ด ๊ตฌ์ถ๋๋ ๋ ๋๋ง์ ๋น๊ตํด value๊ฐ์ด ๋์ผํ ๊ฒฝ์ฐ์๋ ์ด์ ๋ ๋๋ง์ value๊ฐ์ ๊ทธ๋๋ก ์ฌํ์ฉํ ์ ์๊ฒ ๋๋ค. ์ด๋ ๋ฉ๋ชจ์ด์ ์ด์ (Memoization) ๊ฐ๋ ๊ณผ ๊ธด๋ฐํ ๊ด๊ณ๊ฐ ์๋ค.
โจ Memoization
- ์๊ณ ๋ฆฌ์ฆ์์ ์์ฃผ ๋์ค๋ ๊ฐ๋
- ๊ธฐ์กด์ ์ํํ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ์ ํด๋๊ณ , ๋์ผํ ์ ๋ ฅ์ด ๋ค์ด์ค๋ฉด ์ฌํ์ฉํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ
์ด ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ ์ ํ ์ฌ์ฉํ๋ค๋ฉด ๊ตณ์ด ์ค๋ณต ์ฐ์ฐ์ ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฑ์ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋ค.
useMemo๋ ๋ฐ๋ก ์ด ๊ฐ๋ ์ ์ด์ฉํ์ฌ ๋ณต์กํ ์ฐ์ฐ์ ์ค๋ณต์ ํผํ๊ณ React ์ฑ์ ์ฑ๋ฅ์ ์ต์ ํ์ํจ๋ค. ์ง์ ๋ฉ๋ชจ์ด์ ์ด์ ๊ฐ๋ ์ ์ด์ฉํ์ฌ ๋ก์ง์ ๊ตฌํํ ์๋ ์๊ฒ ์ผ๋, useMemo Hook์ ํธ์ถํ๋ค๋ฉด ์ด๋ฐ ๋ก์ง์ ์ง์ ๊ตฌํํ๋ ๊ฒ์ ๋์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ํจ์ฌ ๊ฐํธํ๋ค๊ณ ํ ์ ์๋ค.