useCallback๊ณผ useMemo๋ ๋ ๋ค ReactHooks ์
๋๋ค.
useCallback
useCallback์ ์ฝ๋ฐฑํจ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์
ํ์ฌ ๋ถ ํ์ํ ๋ ๋๋ง์ ๋ฐฉ์ง ํฉ๋๋ค. useCallback์ ํน์ ํจ์๋ฅผ ์๋ก ๋ง๋ค์ง ์๊ณ ์ฌ์ฌ์ฉ ํ๊ณ ์ถ์๋ ์ฌ์ฉํ๋ ํ
์
๋๋ค.
์์กด์ฑ ๋ฐฐ์ด(dependency array)์ด ๋ณ๊ฒฝ๋์ง ์๋ ํ ๋์ผํ ํจ์์ ์ธ์คํด์ค๋ฅผ ๋ฐํํฉ๋๋ค. ์ฃผ๋ก ์์ ์ปดํฌ๋ํธ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌํ ๋, ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
const memoizedCallback = useCallback(() => { // ํจ์ ๋ก์ง }, [์์กด์ฑ1, ์์กด์ฑ2]);
- ์์ ์ปดํฌ๋ํธ์ props๋ก ์ ๋ฌ๋๋ ํจ์๊ฐ ๋งค๋ฒ ์๋ก ์์ฑ๋์ง ์๋๋ก ๋ฐฉ์ง.
- ์๋ฅผ ๋ค์ด, ๋ฒํผ ํด๋ฆญ ํธ๋ค๋ฌ๋ ์ด๋ฒคํธ ์ฝ๋ฐฑ์ ์์ ์ปดํฌ๋ํธ์ ์ ๋ฌํ ๋ ์ ์ฉ.
import React, { useState, useCallback } from 'react'; function Child({ onClick }) { console.log('Child rendered'); return <button onClick={onClick}>Click me</button>; } function Parent() { const [count, setCount] = useState(0); // useCallback ์์ด ํจ์๋ฅผ ์ ์ํ๋ฉด ๋งค ๋ ๋๋ง๋ง๋ค ์ ํจ์๊ฐ ์์ฑ๋จ const handleClick = useCallback(() => { setCount((prev) => prev + 1); }, []); // ์์กด์ฑ ๋ฐฐ์ด์ด ๋น ๊ฒฝ์ฐ, ํจ์๋ ์ฒ์ ์์ฑ๋ ํ ์ฌ์ฌ์ฉ๋จ return ( <div> <p>Count: {count}</p> <Child onClick={handleClick} /> </div> ); }
useMemo
useMemo๋ ์ ๋ฌ๋ ํจ์๊ฐ ์คํ๋๊ณ ๋ฐํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์
ํ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๊ณ์ฐ ๋น์ฉ์ด ๋์ ๊ฐ์ ๋ฉ๋ชจ์ด์ ์ด์
ํ์ฌ ๋ถํ์ํ ์ฌ๊ณ์ฐ์ ๋ฐฉ์ง ํฉ๋๋ค. ์์กด์ฑ ๋ฐฐ์ด์ด ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด ์ด์ ์ ๊ณ์ฐ๋ ๊ฐ(๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑ)์ ์ฌ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํฉ๋๋ค.
const memoizedValue = useMemo(() => { // ๊ณ์ฐ ๋ก์ง return ๊ฒฐ๊ณผ๊ฐ; }, [์์กด์ฑ1, ์์กด์ฑ2]);
- ๋ณต์กํ ์ฐ์ฐ(์: ๋ฐฐ์ด ํํฐ๋ง, ๋ฐ์ดํฐ ๊ฐ๊ณต ๋ฑ)์ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑ.
- ๋ ๋๋ง ์ค ๋ถํ์ํ ๊ณ์ฐ์ ํผํ๊ณ ์ถ์ ๋.
import React, { useState, useMemo } from 'react'; function ExpensiveComponent() { const [number, setNumber] = useState(1); // ๋น์ฉ์ด ํฐ ๊ณ์ฐ์ ์๋ฎฌ๋ ์ด์ const computeExpensiveValue = (num) => { console.log('Computing...'); return num * 1000; // ๊ฐ๋จํ ์์๋ก ๊ณฑ์ ์ฌ์ฉ }; // useMemo๋ก ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ const expensiveResult = useMemo(() => computeExpensiveValue(number), [number]); return ( <div> <p>Result: {expensiveResult}</p> <button onClick={() => setNumber(number + 1)}>Increment</button> </div> ); }
์ฌ๊ธฐ์ expensiveResult๋ number๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง ์๋ก ๊ณ์ฐ๋๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด์ ๊ฐ์ ์ฌ์ฌ์ฉํฉ๋๋ค. Computing... ๋ก๊ทธ๋ number๊ฐ ๋ฐ๋ ๋๋ง ์ถ๋ ฅ๋ฉ๋๋ค.
๋ ํ ๋ชจ๋ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ๋๊ตฌ์ด์ง๋ง, ๋จ์ฉํ๋ฉด ์ฝ๋๊ฐ ๋ณต์กํด์ง ์ ์์ผ๋ ์ ๋ง ํ์ํ ์ํฉ(์: ์์ฃผ ๋ฆฌ๋ ๋๋ง๋๊ฑฐ๋ ๊ณ์ฐ ๋น์ฉ์ด ํฐ ๊ฒฝ์ฐ)์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.