useCallback()
useCallback()
1. ๊ฐ์
useCallback()
ํ
์ useMemo()
์ ๋๋ถ์ด ์ฑ๋ฅ ์ต์ ํ์ ์ฌ์ฉ๋๋ React์ ํ
์ด๋ค. useMemo()
๋ ํน์ ๊ฒฐ๊ณผ๊ฐ์ ์ฌ์ฌ์ฉํ ๋ ์ฌ์ฉํ๋ ๋ฐ๋ฉด, useCallback()
ํ
์ ํน์ ํจ์๋ฅผ ์๋ก ๋ง๋ค์ง ์๊ณ ์ฌ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ ํ
์ด๋ค.
2. useCallback() ์ฌ์ฉ๋ฒ
์ฌ์ฉ๋ฒ const fn = useCallback(function, deps)
function: Memoization์ ํ๋ ํจ์
deps: ์์กด์ฑ ๋ฐฐ์ด๋ก
useEffect()
์ deps์ ๊ฐ๋ค.
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ์ useMemo()
๊ณผ ๊ฐ์ ๋ณด์ธ๋ค. ํ์ง๋ง ํจ์๋ฅผ Memoizationํ๋์ง ํน์ ๊ฐ์ Memoization์ด ํ๋ ๊ฒ์ ์ฐจ์ด๊ฐ ์๋ค.
3. useCallback()๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ปดํฌ๋ํธ์ ๋๋๋ง
๋จผ์ useCallback()
ํ
์ ์ฌ์ฉํ์ง ์์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋๋๋งํ๋ ๊ณผ์ ์ ์ดํด๋ณด์. ์ต๊ทผ์ ์ ์ฃผ๋ ์ฌํ์ ๋ค๋
์๊ธฐ์ ์ด์ ๊ด๋ จํ ๊ฐ๋จํ ์ฝ๋๋ฅผ ์์๋ก ์๊ฐํ๋ค.
์๋์ ๊ฐ์ด ๋ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ค.
์ฝ๋์ ๋ถ์๋ถํฐ ํด๋ณด์.
๋จผ์ ๋๋
useForm
ํ ์ ์ฌ์ฉํ๊ณ ์๋ค. ์ด ํ ์react-hook-form
๋ชจ๋์ ์ค์นํ ํ ์ฌ์ฉํ ์ ์๋ค. ํด๋น ๋ชจ๋๊ณผ ํ ์ ๋ํด์๋ ๋ค๋ฅธ ์ฑํฐ์์ ์์ธํ ๋ค๋ฃจ๋๋ก ํ๊ฒ ๋ค.isSunny
์gift
๋ผ๋ state๋ฅผ ๋ง๋ค์๋ค.isSunny
state๋๋ ์จ ๋ฐ๊พธ๊ธฐ
๋ฒํผ์ ๋๋ฌ ๊ฐ์ ๋ฐ๊ฟ ์ ์๊ณ ๊ฐ์ ๋ฐ๋ผ ๋นํ๊ธฐ๊ฐ ์ด๋ฅํ ์ ์๋์ง ์๋์ง ํ ์คํธ๋ก ์๋ ค์ฃผ๊ณ ์๋ค.gift
state๋ ์ด๊ธฐ๊ฐ์ด ๋ฐฐ์ด์ด๊ณinput
์์ ๋ฐ์ ๊ฐ์ ์ฐจ๋ก๋๋กArray.push()
๋ฉ์๋๋ฅผ ํตํด ์ ์ฅํ๊ณ ์๋ค.getMyGift()
๋Children
์ปดํฌ๋ํธ์props
๋ก ์ ๋ฌํ๋ ํจ์์ด๋ค. ํด๋น ํจ์๋ ๋ฐฐ์ด์Array.join()
๋ฉ์๋๋ฅผ ํตํด ๋ฌธ์์ด๋ก ๋ฐ๊พธ๋ ์ญํ ์ ํ๋ค.Children
์ปดํฌ๋ํธ์์๋myGift
state๊ฐ ์ ์ธ์ด ๋์ด ์๋ค. ํด๋น state๋props
์ผ๋ก ์ ๋ฌ๋ฐ์getMyGift()
๊ฐ ์ ๋ฐ์ดํธ ๋ ๋ ๋ง๋คuseEffect()
์ ํตํด ์ ๋ฐ์ดํธ ๋๊ณ ์๋ค.
์ฝ๋ ๋ถ์์ด ๋๋ฌ์ผ๋ state๊ฐ๋ค์ ๋ณ๊ฒฝํ์ฌ ํ๋ฉด์ด ๋๋๋งํ๋ ๊ณผ์ ์ ์์๋ณด์. ์ผ๋จ ์ ์ฃผ๋์ ๊ฐ์ผ๋ ๊ธฐ๋
ํ์ ์ฌ์ผํ๋ค. ์ฌ๊ณ ์ถ์ ๊ธฐ๋
ํ์ ์
๋ ฅํ๊ณ ๊ธฐ๋
ํ ๊ณ ๋ฅด๊ธฐ
๋ฒํผ์ ๋๋ฌ ๋์ ๊ธฐ๋
ํ ๋ชฉ๋ก์ ์ถ๊ฐํ์.
์ด์ฝ๋ฆฟ, ๋จธ๊ทธ์, ์ ์ฃผ๋ฆฌ์ผํ๋ฅดํธ, ํฅ์๋ฅผ ๊ธฐ๋
ํ ํ๋ชฉ์ ์ถ๊ฐํ์๋ค. ์ถ๊ฐ๊ฐ ๋ ๋ ๋ง๋ค getMyGift()
๊ฐ ์๋ก์ด ํจ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ณ ์๊ธฐ ๋๋ฌธ์ Children
์ปดํฌ๋ํธ์ useEffect()
๊ฐ ์คํ๋๋ค.
๊ทธ๋ ๋ค๋ฉด getMyGift()
์ ์ ํ ์๊ด์๋ isSunny
์ ๊ฐ์ ๋ฐ๊พธ๊ฒ ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๋ ์จ ๋ฐ๊พธ๊ธฐ
๋ฒํผ์ ํด๋ฆญํ์ฌ ๋นํ๊ธฐ๋ฅผ ๋ค์๋ ์ ๋์ด๋ณด์.
๋ ์จ๊ฐ ๋ฐ๋์ด ํํ์ด ์ค๊ณ ์๋ค. isSunny
๊ฐ์ ์ฑ๊ณต์ ์ผ๋ก ๋ฐ๋์๊ณ gift
์ ๊ฐ์ ๋ฐ๋์ง ์์๋ค. ํ์ง๋ง getMyGift()
๊ฐ ์๋ก์ด ํจ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๊ณ ์์ด Children
์ปดํฌ๋ํธ์ useEffect()
๊ฐ ์คํ์ด ๋์๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ "์๋ก์ด ๊ธฐ๋
ํ์ด ์ถ๊ฐ๋์์ต๋๋ค!"๋ผ๋ ํ
์คํธ๊ฐ ์ฝ์์ ํ๋ ๋ ์ถ๊ฐ๋ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
์ฆ ๋ฆฌ๋๋๋ง์ด ํ์ํ์ง ์๋ ์ปดํฌ๋ํธ์์ ๋ถํ์ํ ๋ฆฌ๋๋๋ง์ด ์ผ์ด๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ์ด์ ๋ useMemo()
์ฑํฐ์์ ์ค๋ช
ํ์ง๋ง ๋ค์ ๋ณต์ตํ์๋ฉด, ๋ฆฌ์กํธ์์์ ์ปดํฌ๋ํธ๋ ํ๋์ ํจ์์ด๋ค. ์ฆ ํจ์๊ฐ ๋ฆฌ๋๋๋ง ๋๋ค๋ ๊ฒ์ ๋ณ์๊ฐ ์ด๊ธฐํ๊ฐ ๋๋ค๋ ๊ฒ์ด๋ค. ๊ฐ์ ์ญํ ์ ํ๊ณ ์๋ ํจ์์ง๋ง ๋ณ์๊ฐ ์ฐธ์กฐํ๊ณ ์๋ ํจ์ ๊ฐ์ฒด์ ์ฃผ์๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
4. useCallback()๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ์ ๋๋๋ง
์ด์ useCallback()
ํ
์ ์ฌ์ฉํ์ฌ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์.
getMyGift()
์ ํจ์๋ฅผ ์๋์ ๊ฐ์ด ์์ ํ์.
๊ทธ๋ฆฌ๊ณ ๋์ ๋ค์ ๊ธฐ๋ ํ ๋ชฉ๋ก์ ์ถ๊ฐํด๋ณด์.
์ด๋ฒ์๋ ๊ธฐ๋
ํ ์ถ๊ฐ ๋ ๋๋ง Children
์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋๋๋ง์ด ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ทธ๋ฌ๋ฉด ๋ ์จ ๋ฐ๊พธ๊ธฐ
๋ฒํผ์ ํด๋ฆญํ์ฌ Children
์ปดํฌ๋ํธ์ ๊ด๋ จ์๋ isSunny
์ ๊ฐ์ ๋ฐ๊พธ์ด ๋ณด์.
isSunny
์ ๊ฐ์ด ๋ฐ๋์ด ๋ ์จ๊ฐ ํํ์ผ๋ก ์
๋ฐ์ดํธ ๋์ด๋ Children
์ปดํฌ๋ํธ๋ ๋ฆฌ๋๋๋ง์ด ๋์ง ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด๋ useCallback()
ํ
์ ์์กด์ฑ ๋ฐฐ์ด์ ๊ฐ์ผ๋ก gift
๋ง ์ถ๊ฐํ๊ธฐ์ isSunny
๊ฐ ์๋ฌด๋ฆฌ ๋ฐ๋์ด๋ getMyGift()
ํจ์๊ฐ ์ฐธ์กฐํ๊ณ ์๋ ํจ์ ๊ฐ์ฒด์ ์ฃผ์๋ ๋ฐ๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
5. Conclusion
useMemo()
ํ ๊ณผuseCallback()
ํ ์ ๊ณต๋ถํ๋ฉด์ ๋๊ผ๋ ์ ์ "๊ณผ์ฐ ๋ด๊ฐ ์ ์ ์ ์์ ํด๋น ํ ์ ์ ์ฌ์ฉํ ์ ์์๊น?"์๋ค. ์ง๊ธ๊น์ง ๋๋๋ง ์ต์ ํ์ ๋ํ ๊ณ ๋ฏผ์ ํ์ง ์๊ณ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ํ์ํ ๊ณณ์ ๋ด๊ฐ ์ ์ ์ฉ์ ํ ์ ์์์ง ๊ฑฑ์ ์ด ๋๋ค. ๊ทธ๋๋ ์ผ๋ฅธ ํฐ์ฒ์บ ๋ฆฌํฉํ ๋ง์ ์์ํด์ ์ง์ ํ๋ก์ญํธ์ ์ ์ฉ์ ํ๊ณ ์ถ๋ค. ๋ฆฌํฉํ ๋ง์ ๋ค์์ฃผ ์์์ผ(22.8.8) ๋ถํฐ ์์!
์ฐธ๊ณ
[React] ๋ฆฌ์กํธ Hooks : useCallback() ํจ์ ์ฌ์ฉ๋ฒ React Hooks: useCallback ์ฌ์ฉ๋ฒ
๋์์ด ๋ง์ด ๋์๋ ์ ํ๋ธ ๐ฌ
React Hooks์ ์ทจํ๋ค - useCallback ์งฑ ์ฌ์ด ๊ฐ์ | ๋ฆฌ์กํธ ํ ์ค ์๋ฆฌ์ฆ
๐ 2022-08-04
Last updated