Memoization
Reactμμλ μμ μ»΄ν¬λνΈκ° 리λ λλ§λκ±°λ, ν΄λΉ μ»΄ν¬λνΈμ μνκ° λ³κ²½λ κ²½μ°μ 리λ λλ§μ μννλ€.
λΆνμν 리λ λλ§
const App = () => {
const [count, setCount] = useState(0);
return (
<div>
<Description />
<CounterButton
count={count}
onClick={() => setCount((prev) => prev + 1)}
/>
</div>
);
};
const CounterButton = ({ count, onClick }) => {
return <button onClick={onClick}>Clicked {count} times!</button>;
};
const Description = () => {
return <p>Click the button</p>;
};μμ μ½λλ λ²νΌμ ν΄λ¦νμ λ 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