memoization์ React ์ปดํฌ๋ํธ์ ๋ ๋๋ง ์ฑ๋ฅ์ ์ต์ ํํ๋ ๊ธฐ์ ๋ก, ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ(์บ์ฑ caching)ํ์ฌ ๋์ผํ ๊ณ์ฐ์ ๋ฐ๋ณตํ๊ฑฐ๋ ์ปดํฌ๋ํธ์ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ๋ค. ์ฆ, ๋์ผํ ๊ณ์ฐ์ ์๊ตฌํ ๋, ๊ณ์ฐ์ ๋ค์ ํ๋ ๊ฒ์ด ์๋ ์ด์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ๋์ธ๋ค.
*์บ์ Cache๋? : ๋ฐ์ดํฐ๋ ๊ฐ์ ๋ฏธ๋ฆฌ ๋ณต์ฌํด ๋๋ ์์ ์ฅ์. ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฒฝ์ฐ๋ ๊ฐ์ ๋ค์ ๊ณ์ฐํ๋ ์๊ฐ์ ์ ์ฝํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ ์์ ์ ์ฅ ๊ณต๊ฐ์ผ๋ก, ์ด๋ฅผ ์ฌ์ฉํด ๊ฐ์ ์์๋ก ์ ์ฅํด๋๋ ๊ฒ์ "์บ์ฑ caching"์ด๋ผ๊ณ ํ๋ค.
๊ทธ ์ธ์๋ ์ฐ๋กํ๋ง, ๋๋ฐ์ด์ฑ ๋ฑ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋ ๋์ผํ ํจ์๋ฅผ ์ฌ์์ฑ์ ๋ฐฉ์งํด์ผํ๊ฑฐ๋ ์์ ์ปดํฌ๋ํธ์ ๋ถํ์ํ ๋ ๋๋ง์ ๋ฐฉ์งํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํด์ผํ ๋ ์ฌ์ฉํ๋ค.
React.memo
๋ ํจ์ํ ์ปดํฌ๋ํธ์ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฅผ ๋ฉ๋ชจ์ด์งํ๋๋ฐ ์ฌ์ฉํ๋ค. ์ฆ, props์ ๋ณ๊ฒฝ์ด ์๋ค๋ฉด ์ด์ ๋ ๋๋ง์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฌ์ฉํ๋ค. ์ด๋ ๋ค์์ ์์ ์ปดํฌ๋ํธ๊ฐ ์๋ ๊ฒฝ์ฐ, ์์ ์ปดํฌ๋ํธ๊น์ง ๋ฆฌ๋ ๋๋ง์ ํ์ง ์์๋ ๋์ด ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค. props๊ฐ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ์ง๋ง, ๋ด๋ถ state๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ฆฌ๋ ๋๋ง์ด ๋๋ค.
React.
๋ ์๋ต์ด ๊ฐ๋ฅํ๋ค!const App = (props) => {
// ๋ ๋๋ง ๋ก์ง...
};
export default React.memo(App);
const App = memo((props) => {
//๋ ๋๋ง ๋ก์ง...
});
useMemo
๋ ํน์ ๊ณ์ฐ์ ๊ฒฐ๊ณผ(ํจ์์ return ๊ฐ) ์ ๋ฉ๋ชจ์ด์งํ๋๋ฐ ์ฌ์ฉํ๋ค. ์ด๋ ๋ณต์กํ๊ฑฐ๋ ๋ฌด๊ฑฐ์ด ์์
์ ๋ฐ๋ณตํ์ง ์๋๋ก ํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ๋ค. ์ฆ, useMemo
๋ ๋ ๋๋ง๋ ๋๋ง๋ค ์คํ๋์ง๋ง, ์์กด์ฑ ๋ฐฐ์ด ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด ์ด์ ๊ฐ์ ๋ฐํํ๋ค.
useMemo
๋ ์ฝ๋ฐฑํจ์์ ์์กด์ฑ ๋ฐฐ์ด์ ์ธ์๋ก ๋ฐ๋๋ฐ, ์์กด์ฑ ๋ฐฐ์ด ์ค ํ๋๋ผ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ฝ๋ฐฑํจ์๋ฅผ ์ฌ์คํํ๋ค.
const ์ด๋ฆ = useMemo(์ฝ๋ฐฑํจ์, ์์กด์ฑ ๋ฐฐ์ด)
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
useCallback
์ ํน์ ํจ์๋ฅผ ๋ฉ๋ชจ์ด์งํ๋๋ฐ ์ฌ์ฉํ๋ค. React ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋ ๋ง๋ค ์์ฐจ์ ์ผ๋ก ๋ ๋๋ง์ ํ๋๋ฐ, ์ด๋๋ง๋ค ๋์ผํ ํจ์๊ฐ ์๋กญ๊ฒ ์์ฑ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฑ๋ฅ์ ์ ํ์ํค๋ฉฐ ์์ ์ปดํฌ๋ํธ์ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง๊น์ง ์ผ๊ธฐํ๊ฒ ๋๋๋ฐ, useCallback
์ผ๋ก ํจ์๋ฅผ ๋ฉ๋ชจ์ด์งํ์ฌ ํด๊ฒฐํ ์ ์๋ค.
useCallback
๋ ์ฝ๋ฐฑํจ์์ ์์กด์ฑ ๋ฐฐ์ด์ ์ธ์๋ก ๋ฐ์ผ๋ฉฐ, ์์กด์ฑ ๋ฐฐ์ด์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ฝ๋ฐฑํจ์๋ฅผ ์ฌ์คํํ๋ค.
const ์ด๋ฆ = useCallback(์ฝ๋ฐฑํจ์, ์์กด์ฑ ๋ฐฐ์ด)
const [name, setName] = useState('');
const [age, setAge] = useState(0);
const onSave = useCallback(() => saveUserInfo(name, age), [name, age]);
API | ๋ฉ๋ชจ์ด์ง ๋์ | ์ธ์ |
---|---|---|
React.memo | ์ปดํฌ๋ํธ | ํจ์ํ ์ปดํฌ๋ํธ |
useMemo | ๊ณ์ฐ ๊ฐ(ํจ์ return ๊ฐ) | ์ฝ๋ฐฑํจ์, ์์กด์ฑ ๋ฐฐ์ด |
useCallback | ํจ์ | ์ฝ๋ฐฑํจ์, ์์กด์ฑ ๋ฐฐ์ด |
memoization ์ฐธ๊ณ ์ฌ์ดํธ 1
memoization ์ฐธ๊ณ ์ฌ์ดํธ 2
memoization ์ฐธ๊ณ ์ฌ์ดํธ 3
์บ์/์บ์ฑ ์ฐธ๊ณ ์ฌ์ดํธ