๐ฐ useCallback๊ณผ useMemo
๐ useCallback๊ณผ useMemo ์ฌ์ฉ ์ด์
ํจ์ ์ปดํฌ๋ํธ๋ ๋ ๋๋ง ๋ ๋ ๋ง๋ค ๋ชธ์ฒด๊ฐ ๋ค์ ์คํ๋๋ฏ๋ก ์ปจํ ์คํธ๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ํด Hook์ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ์ปดํฌ๋ํธ๋ ๊ธฐ์ต๋ ์ํ ๋๋ ์ ๋ฐ์ดํธ ํจ์๋ฅผ ํ์ ์ปดํฌ๋ํธ์๊ฒ ์ ๋ฌํ๋ค.
์ด ๋ ์์ ์ปดํฌ๋ํธ๊ฐ ๋ค์ ์คํ๋๋ฉด
๐ธ useCallback
useCallback()
์ ํ์ ์ปดํฌ๋ํธ์ ์ ๋ฌ๋๋ ํจ์๋ฅผ ๊ธฐ์ตํด๋๊ณ ์ด๋ฅผ ์ด์ฉํ์ฌ ์ปดํฌ๋ํธ ์
๋ฐ์ดํธ ์ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ ๋, ๊ธฐ์ต๋ ํจ์๋ฅผ ์ฌ์ฉํด ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ์ค์ฌ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
1 | export function Counter({ count: initialCount, step }) { |
- ๊ธฐ์ตํด์ผํ ๋ฐ์ดํฐ ํ์ ์ด ํจ์์ธ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
- useEffect()์ฒ๋ผ ์ข ์์ฑ ๋ฐฐ์ด์ ํตํด ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ธฐ์ต ์ฌ๋ถ๋ฅผ ์ฌ์ค์ ํ ์ ์๋ค.
- 1๋ฒ์ฒ๋ผ ์ฝ๋ฐฑํจ์๋ก ์ ๋ฌํด์ฃผ๋ ๊ฒฝ์ฐ๋ reduce์ฒ๋ผ ํจ์๋ฅผ ๊ธฐ์ตํ๊ณ ์๋๋ค.
๊ธฐ์ต๋์ด์๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด๋ค. - 2๋ฒ์ฒ๋ผ ๊ฐ์ ์ ๋ฌํด์ฃผ๋ฉด newState๋ก ๋ฐ์๋ค์ฌ์ ธ์ ์ข
์์ฑ ๋ฐฐ์ด์ด ๋ฐ๋๋ฉด ๋ ๋๋ง์ด ๋ฐ์ํ๊ฒ๋๋ค.
๊ธฐ์ตํ์ง ์๊ณ ์๋ก์ด ๊ฐ์ ์ ๋ฌํด์ฃผ๊ณ ๊ทธ ๊ฐ์ผ๋ก ๋ ๋๋งํด์ค๋ค.
๐ useMemo
1 | useCallback(fn, deps) === useMemo(() => fn, deps); |
useMemo()๋ JavaScript ๋ฐ์ดํฐ ํ์ ์ ๊ธฐ์ตํด์ผ ํ ๋ ์ฌ์ฉํฉ๋๋ค. ๋ง์ฝ ๊ธฐ์ตํด์ผํ ํ์ ์ด ํจ์๋ผ๋ฉด useCallback์ ์ฌ์ฉํ๋ค.
1 | export function Counter({ count: initialCount, step }) { |
- useMemo()๋ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๊ธฐ์ตํ๋ค.
- ์ข
์์ฑ ๋ฐฐ์ด
[count, onDecrement, onIncrement, restProps]
์ด ๋ณ๊ฒฝ๋๋ฉด useMemo๊ฐ ๋ฐํํ๋ ๊ฐ์ ๊ธฐ์ตํ๊ณ ์คํํ๋ค. setCount()
๋ฅผ ๊ธฐ์ตํ๊ณ ์์ด ๋์ผ์ฐธ์กฐ๋ฅผ ํ๋ฏ๋ก count ๊ฐ์ ๊ธฐ์ตํ๊ณ ์๋ค.
๐ ์๊ฐ
๊ฐ์ ๊ธฐ์ตํ๋ ๋ชฉ์ ์ผ๋ก ์ข์ง๋งโฆ ๊ตณ์ด ์ด๊ฒ์ ์ฌ์ฉํ๋ ค๊ณ ๋ณต์กํ๊ฒ ๋ ๋ง์ ์๊ฐ์ ํ ์ ํ ํ์๊ฐ ์์๊น ?