๋ณ์ฝ๋ฉ-React Hooks์ ์ทจํ๋ค - useMemo ์ ๋๋ก ์ฌ์ฉํ๊ธฐ | ๋ฆฌ์กํธ ํ ์ค ์๋ฆฌ์ฆ ๋ฅผ ๋ณด๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
useMemo์์ Memo๋ผ๋ ๋ง์ Memoization์ ๋ปํ๋ค. ์ฌ๊ธฐ์ ๋ฉ๋ชจ์ด์ ์ด์
์ด๋ ๋์ผํ ๊ฐ์ ๋ฆฌํดํ๋ ํจ์๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถํด์ผ ํ๋ค๋ฉด ๋งจ ์ฒ์ ๊ฐ์ ๊ณ์ฐํ ๋ ํด๋น ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด์ ๋ ๋ค์ ๊ณ์ฐํ์ง ์๊ณ ํ์ํ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์์ ๊บผ๋ด์ ์ฌ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ ๋งํ๋ค.
๋ ๊ฐ๋จํ ๋งํ์๋ฉด ์์ฃผ ํ์ํ ๊ฐ์ ๋งจ ์ฒ์ ๊ณ์ฐ ํ ๋ ์บ์ฑ์ ํด๋ฌ์ ๊ทธ ๊ฐ์ด ํ์ํ ๋๋ง๋ค ์บ์์์ ๊บผ๋ด์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
function Component(){
const value = calculate();
return <div>{value}</div>
}
value
๋calculate()
ํจ์๋ก ๋ถํฐ ๊ฐ์ ๋ฐ์์จ๋ค. ๋๋ถ๋ถ์ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ state props์ ๋ณํ๋ก ์ธํด ์๋ง์ ๋ ๋๋ง์ ๊ฑฐ์น๋ค. ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋๋ง๋ค value
๊ฐ ์ด๊ธฐํ๋๊ธฐ ๋๋ฌธ์ calculate()
ํจ์๋ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถ๋ ๊ฒ์ด๋ค. ์ด๋ ๋ง์ฝ calculate()
ํจ์๊ฐ ๋งค์ฐ ๋ฌด๊ฑฐ์ด ์์
์ ํ๋ ํจ์๋ผ๋ฉด ๊ต์ฅํ ๋นํจ์จ์ ์ผ ๊ฒ์ด๋ค. ์๋ํ๋ฉด ์ด ํจ์๋ ๋ฌด์๋ฏธํ ๊ณ์ฐ์ ๋ฐ๋ณตํด์ value
๋ผ๋ ๋ณ์์ ๊ฐ์ ๊ฐ์ ๋ฐ๋ณต์ ์ผ๋ก ํ ๋นํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ useMemo๋ฅผ ์ฌ์ฉํด์ Memoization ์ ํด์ฃผ๋ฉด ์ด ์ํฉ์ ๊ฐํธํ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
function Component(){
const value = useMemo(
() => calculate()
,[]);
return <div>{value}</div>
}
useMemo๋ ์ฒ์์ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด์ ์ปดํฌ๋ํธ๊ฐ ๋ฐ๋ณต์ ์ผ๋ก ๋ ๋๋ง๋์ด๋ calculate๋ฅผ ๋ค์ ํธ์ถํ์ง ์๊ณ ์ด์ ์ ์ด๋ฏธ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์์ ๊บผ๋ด์์ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
useMemo๋ ๋๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋๋ค. ์ฒซ๋ฒ์งธ ์ธ์๋ก๋ ์ฝ๋ฐฑํจ์, ๋๋ฒ์งธ ์ธ์๋ก๋ ๋ฐฐ์ด์ ๋ฐ๋๋ค.
const value = useMemo(() => {
return calculate();
}, [item]);
์ฒซ๋ฒ์งธ ์ธ์์ธ ์ฝ๋ฐฑํจ์๋ ์ฐ๋ฆฌ๊ฐ ๋ฉ๋ชจ์ด์ ์ด์
ํด์ค ๊ฐ์ ๊ณ์ฐํด์ ๋ฆฌํดํด์ฃผ๋ ํจ์์ด๋ค. ์ด ์ฝ๋ฐฑํจ์๊ฐ ๋ฆฌํดํ๋ ๊ฐ์ด ๋ฐ๋ก useMemo๊ฐ ๋ฆฌํดํ๋ ๊ฐ์ด ๋๋ ๊ฒ์ด๋ค.
๋๋ฒ์งธ ์ธ์์ธ ๋ฐฐ์ด์ ์์กด์ฑ ๋ฐฐ์ด
์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค. useMemo๋ ๋ฐฐ์ด์์ ๊ฐ์ด ์
๋ฐ์ดํธ ๋ ๋๋ง ์ฝ๋ฐฑํจ์๋ฅผ ๋ค์ ํธ์ถํด์ ๋ฉ๋ชจ์ด์ ์ด์
๋ ๊ฐ์ ์
๋ฐ์ดํธํด์ ๋ค์ ๋ฉ๋ชจ์ด์ ์ด์
์ ํด์ค๋ค.
๋ง์ฝ์ ๋น๋ฐฐ์ด []
์ ๋๊ฒจ์ฃผ๋ฉด ๋งจ ์ฒ์ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋์์ ๋๋ง ๊ฐ์ ๊ณ์ฐํ๊ณ ์ดํ์๋ ํญ์ ๋ฉ๋ชจ์ด์ ์ด์
๋ ๊ฐ์ ๊บผ๋ด์์ ์ฌ์ฉํ๋ค.
์ด๋ ๊ฒ ์ข์ useMemo๋ ๋จ์ฉํ๊ฒ ๋๋ฉด ์คํ๋ ค ์ฑ๋ฅ์ ๋ฌด๋ฆฌ๊ฐ ๊ฐ ์ ์๋ค. useMemo๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฑด ๊ฐ์ ์ฌํ์ฉํ๊ธฐ ์ํด์ ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ชจํด์ ๊ฐ์ ์ ์ฅํด ๋๋ค๋ ๊ฒ์ธ๋ฐ ์ด๋ ๋ถํ์ํ ๊ฐ๋ค๊น์ง ๋ชจ๋ ๋ฉ๋ชจ์์ด์ฆ ํด๋ฒ๋ฆฌ๋ฉด ์คํ๋ ค ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ useMemo๋ ํ์ํ ๋๋ง ์ ์ ํ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๊ฐ์ฒด ํ์ ์ ๋ฐ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ๋ณด๊ด์ด ๋๊ณ ๋ณ์์๋ ๊ฐ์ฒด์ ์ฃผ์๊ฐ ๋ณด๊ด๋๋ค. ๋๊ฐ์ ๋ณด์ด๋ ๋ณ์๊ฐ ๋ด๊ฒจ์๋ ๊ฐ์ฒด๋ฅผ ๋น๊ตํด๋ณด๋ฉด ์์ ๋ด์ฉ์ด ๊ฐ์๋ ์ฃผ์๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅด๋ค๋ ๊ฒฐ๊ณผ๊ฐ์ด ๋์จ๋ค.
๊ทธ๋์ ์ค์ ๋ก useEffect๋ฅผ ์์ํ์
์ด ์๋ ๊ฐ์ฒดํ์
๊ณผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ด๋ฐ eslint ์๋ฌ๊ฐ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋ ๋๋ฉด ๋๊ฐ์ ๋ณด์ด๋ location ๊ฐ์ฒด์ฌ๋ ์ฐธ์กฐํ๊ณ ์๋ ์ฃผ์๊ฐ ๋ฐ๊ผ๊ธฐ ๋๋ฌธ์ location์ ์๋ก์ด ๊ฐ์ฒด๊ฐ ๋ค์ ํ ๋น๋์๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ค๋ฅธ state๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์ปดํฌ๋ํธ๋ ๋ฆฌ๋ ๋ ๋๊ธฐ ๋๋ฌธ์ useEffect์ ๊ฐ์ฒดํ์ ์ ๊ฐ์ด ์ฌ์ฉํ๋ ๊ฒ์ ์ข์ง์๋ค.
์ค์ ๋ก eslint์์๋ location์ useMemo()
Hook์ผ๋ก ๊ฐ์ธ๋ผ๋ ๋ง์ ํด์ค๋ค.
์ด์ ์ด ๋ฌธ์ ๋ฅผ useMemo๋ฅผ ์ฌ์ฉํด์ ํด๊ฒฐํด๋ณด์.
์ด๋ ๊ฒ useMemo๋ฅผ ์ฌ์ฉํด์ ํจ๊ณผ์ ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ์ต์ ํ ์ํฌ ์ ์๋ค. useEffect์์ ๋ญ๊ฐ ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ ํด์ผํ๋ค๋ฉด ๊ผญ ํ์ํ ๋๋ง ํธ์ถ ๋๋๊ฒ์ด ์ข๊ธฐ ๋๋ฌธ์ด๋ค.