Memoization
React์์๋ ์์ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๊ฑฐ๋, ํด๋น ์ปดํฌ๋ํธ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ์ ๋ฆฌ๋ ๋๋ง์ ์ํํ๋ค.
๋ถํ์ํ ๋ฆฌ๋ ๋๋ง
์์ ์ฝ๋๋ ๋ฒํผ์ ํด๋ฆญํ์ ๋ count
๊ฐ 1์ฉ ๋ํด์ง๋ ๊ฐ๋จํ ์์ ์ด๋ค. ๋ฒํผ์ ํด๋ฆญํ๋ฉด App
, CounterButton
, Description
์ปดํฌ๋ํธ๊ฐ ๋ชจ๋ ๋ฆฌ๋ ๋๋ง๋๋ค.
๊ทธ๋ฌ๋ Description
์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ฆฌ๋ ๋๋ง๋์ด์ผ ํ ํ์๊ฐ ์์๊น? Description
์ปดํฌ๋ํธ๋ count
์ ๋ณ๊ฒฝ์ ๊ด๊ณ์์ด ๋์ผํ ๊ฒฐ๊ณผ๋ก ๋ ๋๋ง๋ ๊ฒ์ด๋ค. ๋ง์ฝ Description
์ปดํฌ๋ํธ๊ฐ ๋ง์ ํ์ ์ปดํฌ๋ํธ ๋๋ ๋ก์ง์ ํฌํจํ๊ณ ์์ด ๋ฆฌ๋ ๋๋งํ๋ ๋ฐ ๋ง์ ๋ฆฌ์์ค๊ฐ ์์๋๋ค๋ฉด, ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ์ํ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ด๋ฌํ '๋ถํ์ํ ๋ฆฌ๋ ๋๋ง' ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด React์์๋ ์ปดํฌ๋ํธ, ๊ฐ, ํจ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์
ํ๋ memo
, useMemo
, useCallback
API๋ฅผ ์ ๊ณตํ๋ค.
memo
์ปดํฌ๋ํธ์ props๊ฐ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ, ์ปดํฌ๋ํธ ๋ฆฌ๋ ๋๋ง์ ๊ฑด๋๋ธ ์ ์๊ฒ ํ๋ค. - React ๊ณต์ ๋ฌธ์
๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ์์ ์์, count
์ํ์ ๋ณ๊ฒฝ์ผ๋ก ์ธํ Description
์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง์ ๋ง๋ ๋ฐ memo
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
Description
์ปดํฌ๋ํธ๋ฅผ ์์ ๊ฐ์ด ๋ณ๊ฒฝํ๋ฉด, CounterButton
์ ํด๋ฆญํด๋ Description
์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋์ง ์๋๋ค.
memo๋ ๋ง๋ฅ์ด ์๋๋ค
์ปดํฌ๋ํธ๋ฅผ memo
๋ก ๊ฐ์์์๋ ๋ถ๊ตฌํ๊ณ , ๋ฆฌ๋ ๋๋ง๋๋ ๋ช ๊ฐ์ง ์ฌ๋ก๊ฐ ์๋ค.
props๊ฐ ๋ณ๊ฒฝ๋์์ ๋
CounterButton
์ปดํฌ๋ํธ๋ count
์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ฆฌ๋ ๋๋ง๋๋ค. onClick
ํจ์๊ฐ ๋ณ๊ฒฝ๋์์ ๋์๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ๋น์ฐํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ด๋ ์๋๋์ง ์์ ๋์์ ๋ฐ์์ํฌ ์ ์๋ค.
React๋ ์์ ๋น๊ต๋ฅผ ํตํด props๋ฅผ ๋น๊ตํ๋ค. ์์ ๋น๊ต๋ก ๊ฐ์ฒด๋ ๋ฐฐ์ด, ํจ์๋ฅผ ๋น๊ตํ๋ฉด, ์ด์ ์ ๊ฐ๊ณผ ๋์ผํ๋๋ผ๋ ์ฐธ์กฐ๊ฐ ๋์ผํ์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ๋ฐ์ง๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์์ ์ปดํฌ๋ํธ์์ ๋ ๋๋งํ ๋๋ง๋ค ๊ฐ์ฒด, ๋ฐฐ์ด, ํจ์๋ฅผ ๋ค์ ์์ฑํ๋ค๋ฉด memo๋ ์ปดํฌ๋ํธ ๋ํ props๊ฐ ๋ณ๊ฒฝ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํด ๋ฆฌ๋ ๋๋ง์ ๋ฐ์์ํจ๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด useMemo
, useCallback
์ ์ฌ์ฉํ๊ฑฐ๋, ์ดํ ์ค๋ช
ํ arePropsEqual
ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ปดํฌ๋ํธ ๋ด๋ถ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋์์ ๋
memo
HOC(๊ณ ์ฐจ ์ปดํฌ๋ํธ)์๋ ๋ ๋ฒ์งธ ์ธ์๋ก arePropsEqual
ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
์ ์์ ์ arePropsEqual
ํจ์๋ points
๊ฐ์ฒด์ ๊ฐ์ด ๋ณ๊ฒฝ๋์๋์ง๋ฅผ ํ์ธํด, ๋ณ๊ฒฝ๋์ง ์์๋ค๋ฉด true
, ๋ณ๊ฒฝ๋์์ผ๋ฉด false
๋ฅผ ๋ฐํํ๋ค. ์ฐธ์กฐ๊ฐ ์๋ ๊ฐ์ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ points
๊ฐ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ฌ์์ฑ๋์ด ์ฐธ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋, ๊ฐ์ด ๋ณํ์ง ์์๋ค๋ฉด Chart
์ปดํฌ๋ํธ๋ ๋ฆฌ๋ ๋๋ง๋์ง ์๋๋ค.
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ ๋ํ ๋ง๋ฅ์ ์๋๋ค. React ๊ณต์ ๋ฌธ์์์๋ arePropsEqual
์ฌ์ฉ ์ ๋ชจ๋ props๋ฅผ ๋น๊ตํด์ผ ํ๋ฉฐ, prop์ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๊น์ด๊ฐ ์ ํ๋์ด ์์ง ์๋ค๋ฉด ๊น์ ๋น๊ต๋ฅผ ์ํํ์ง ๋ง๋ผ๊ณ ๊ถ๊ณ ํ๊ณ ์๋ค. (๊ณต์ ๋ฌธ์)
์ปดํฌ๋ํธ ๋ด๋ถ์์ Context๋ฅผ ์ฌ์ฉํ๊ณ ์์ ๋
์ ์์ ์์ globalContext
์ count
์ํ๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด CounterButton
์ด ๋ฆฌ๋ ๋๋ง๋๋ค. ์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ globalContext
์ ๋ค๋ฅธ ์ํ๊ฐ ์กด์ฌํ๊ณ , ์ด ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด CounterButton
์์ ๊ทธ ์ํ๋ฅผ ์ฌ์ฉํ๊ณ ์์ง ์์์๋ ๋ฆฌ๋ ๋๋ง๋๋ค๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ useContext
์ฌ์ฉ๋ถ๋ฅผ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก ์ด๋์์ผ, count
๋ฅผ props๋ก ์ ๋ฌํ๋ ๊ฒ์ด๋ค.
useMemo
๋ฆฌ๋ ๋๋ง ๊ฐ์ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ๋ค. - React ๊ณต์ ๋ฌธ์
์์ ์์ ์์ Chart
๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋๋ง๋ค points
๋ ๋ค์ ๊ณ์ฐ๋๋ค. calculatePoints
๊ฐ ๋ฌด๊ฑฐ์ด ๋ก์ง์ผ ๋, ๋ถํ์ํ ์ฌ๊ณ์ฐ์ ๋ง๊ธฐ ์ํด useMemo
๋ฅผ ์ฌ์ฉํ ์ ์๋ค. memorizedPoints
๋ ์์กด์ฑ ๋ฐฐ์ด์ ํฌํจ๋ data
๋ฅผ Object.is
(์์ ๋น๊ต)๋ก ๋น๊ตํด ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ , data
๊ฐ ๋ณ๊ฒฝ๋์์ ๋์ ํํด ์บ์ฑ์ ๋ฌดํจํํด ๊ณ์ฐ์ ์ํํ๋ค.
memo์ ํจ๊ป ์ฌ์ฉํ๊ธฐ
memo๋ ๋ง๋ฅ์ด ์๋๋ค ์น์
์์ ์ค๋ช
ํ๋ฏ์ด, memo
๋ก ๊ฐ์ผ ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ธ prop์ ํฌํจํ๊ณ ์์ ๋ ์ฐธ์กฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ๋ค.
์ ์์ ์ points
๋ฅผ prop์ผ๋ก ๋๊ฒจ์ค ๊ฒฝ์ฐ, Chart
๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋๋ง๋ค points
์ ์ฐธ์กฐ๊ฐ ๋ณ๊ฒฝ๋๊ณ , ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์์์๋ ChartInner
์ ์ฐ์์ ์ธ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ๋ค. ๋ฐ๋ฉด์ memorizedPoints
๋ฅผ ๋๊ฒจ์ค๋ค๋ฉด data
๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ํ ๋์ผํ ์ฐธ์กฐ๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ์ง ์๋๋ค.
์ฃผ์์ฌํญ
useMemo๋ Strict Mode์์ ๋ ๋ฒ ํธ์ถ๋๋ค.
memo์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ๋น๊ต๋ก ์์กด์ฑ ๋ฐฐ์ด์ ๋น๊ตํ๊ธฐ ๋๋ฌธ์, ๊ฐ์ฒด ๋ฑ์ ์์กด์ฑ ๋ฐฐ์ด์ ๋ฃ์ ๋ ์ ์์ ์ผ๋ก ๋ฉ๋ชจ์ด์ ์ด์ ๋์ด์๋์ง ํ์ธํด์ผ ํ๋ค.
์์กด์ฑ ๋ฐฐ์ด์ ์ ์ํ์ง ์์ผ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋ ๋๋ง๋ค ๋ค์ ํธ์ถ๋๋ค.
useCallback
๋ฆฌ๋ ๋๋ง ๊ฐ์ ํจ์ ์ ์๋ฅผ ์บ์ฑํ๋ค. - React ๊ณต์ ๋ฌธ์
useMemo
๊ฐ ๋ณ์๋ฅผ ์บ์ฑํ๋ค๋ฉด, useCallback
์ ํจ์๋ฅผ ์บ์ฑํ๋ค.
์ ์์ ์์ ๋ ํจ์์ ์๋์ ๋์ผํ๋ค. ํ์ง๋ง ํจ์๋ฅผ ์บ์ฑํ ๋๋ ํจ์์ฉ์ผ๋ก ์ ๊ณต๋๋ useCallback
์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋
์ฑ ๋ฉด์์ ์ข๋ค.
useMemo
์ ๋์ผํ๊ฒ memo
๋ก ๊ฐ์ธ์ง ์ปดํฌ๋ํธ์ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์์กด์ฑ ๋ฐฐ์ด์ ์์ ๋น๊ต๋ฅผ ์ฃผ์ํด์ผ ํ๋ค.
์ ๋ถ ๋ฉ๋ชจํด์ผ ํ ๊น?
memo
, useMemo
, useCallback
์ ๋ํด ์์๋ณด์๋ค. ์ด ์ต์ ํ ๊ธฐ๋ฒ๋ค์ ์ธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์๊น? ๋ ๋๋ง์ด ์์ฃผ ๋ฐ์ํ๋ ์ปดํฌ๋ํธ? ๊ณ์ฐ ๋ก์ง์ด ๋ณต์กํ ์ปดํฌ๋ํธ? ํ๋จํ๊ธฐ ์ด๋ ค์ฐ๋ ์ ๋ถ ๋ค?
๋ฉ๋ชจ์ด์ ์ด์ ์ ๊ธฐ์ค์ ๋ํด์๋ ์ฌ๋ฌ ์๊ฒฌ์ด ์กด์ฌํ๊ณ , ์ด๋ค ๊ฒ์ด ์ฃ๋ถ๋ฆฌ ์ข๋ค๋ผ๊ณ ๋งํ๊ธฐ ์ด๋ ค์ด ์ฃผ์ ์ด๊ธฐ๋ ํ๋ค. React ํ์์๋ ๋ฉ๋ชจ์ด์ ์ด์ ๋ํ ๋น์ฉ์ด๊ธฐ ๋๋ฌธ์, ๋ถํ์ํ ๋ฉ๋ชจ์ด์ ์ด์ ์ ๋์ฒดํ๋ ๋ฐฉ์๋ค์ ์ ์ํ๋ค.
๋ช ๊ฐ์ง ์์น์ ๋ฐ๋ฅด๋ฉด ๋ง์ ๋ฉ๋ชจ์ด์ ์ด์ ์ ๋ถํ์ํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
์ปดํฌ๋ํธ๊ฐ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ์๊ฐ์ ์ผ๋ก ๊ฐ์ธ๊ณ ์๋ค๋ฉด JSX๋ฅผ ์์์ผ๋ก ๋ฐ๊ฒ ํ์ธ์. ๊ฐ์ธ๋ ์ปดํฌ๋ํธ๊ฐ ์์ ์ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด, React๋ ์์๋ค์ ๋ฆฌ๋ ๋๋งํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋ฉ๋๋ค.
๊ฐ๋ฅํ ํ ๋ก์ปฌ ์ํ๋ฅผ ์ ํธํ๊ณ , ์ปดํฌ๋ํธ ๊ฐ ์ํ ๊ณต์ ๋ฅผ ํ์ ์ด์์ผ๋ก ํ์ง ๋ง์ธ์. ํผ์ด๋ ํญ๋ชฉ์ด ํธ๋ฒ๋์๋์ง์ ๊ฐ์ ์ผ์์ ์ธ ์ํ๋ฅผ ํธ๋ฆฌ์ ์๋จ์ด๋ ์ ์ญ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์งํ์ง ๋ง์ธ์.
๋ ๋๋ง ๋ก์ง์ ์์ํ๊ฒ ์ ์งํ์ธ์. ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ๋ ๋๋งํ๋ ๊ฒ์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํค๊ฑฐ๋ ๋์ ๋๋ ์๊ฐ์ ์ธ ํ์ฒด๋ฅผ ์์ฑํ๋ค๋ฉด, ๊ทธ๊ฒ์ ์ปดํฌ๋ํธ์ ๋ฒ๊ทธ์ ๋๋ค! ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ถ๊ฐํ๋ ๋์ ๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ์ธ์.
์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ถํ์ํ Effects๋ฅผ ํผํ์ธ์. React ์ฑ์์ ๋๋ถ๋ถ์ ์ฑ๋ฅ ๋ฌธ์ ๋ Effects๋ก๋ถํฐ ๋ฐ์ํ ์ฐ์๋ ์ ๋ฐ์ดํธ๊ฐ ์ปดํฌ๋ํธ๋ฅผ ๊ณ์ํด์ ๋ ๋๋งํ๋ ๊ฒ์ด ์์ธ์ ๋๋ค.
Effects์์ ๋ถํ์ํ ์์กด์ฑ์ ์ ๊ฑฐํ์ธ์. ์๋ฅผ ๋ค์ด, ๋ฉ๋ชจ์ด์ ์ด์ ๋์ ๊ฐ์ฒด๋ ํจ์๋ฅผ Effect ์์ด๋ ์ปดํฌ๋ํธ ์ธ๋ถ๋ก ์ด๋์ํค๋ ๊ฒ์ด ๋ ๊ฐ๋จํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- React ๊ณต์ ๋ฌธ์
๋ฉ๋ชจ์ด์ ์ด์ ์ ๋์ฒดํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ์ค๋ช ํ ๋ค๋ฅธ ์ข์ ๊ธ๋ ์ฒจ๋ถํ๋ค.
์ฐธ๊ณ ๋ฌธ์
Last updated