λ λλ§ μ΅μ ν, μ»΄ν¬λνΈ μ΅μ νλ₯Ό μν HookμΌλ‘
useMemo()
,useCallBack()
μ΄ μλ€.
μλμ μ½λμμ calculate()
λ 볡μ‘ν μ°μ°μ ν΄μΌνλ ν¨μμ΄κ³ , κ°μ λ°ννλ λ° λͺ μ΄ μ΄μμ΄ κ±Έλ¦°λ€κ³ κ°μ ν΄λ³΄μ.
λλΆλΆμ React μ»΄ν¬λνΈλ stateμ propsμ λ³νλ‘ μΈν΄ μλ§μ λ λλ§μ κ±°μΉλλ°,
μ΄λ, μ»΄ν¬λνΈκ° λ λλ§λλ€λ κ²μ ν¨μ λ΄λΆμ λͺ¨λ λ³μκ° μ΄κΈ°νλλ€λ κ²μ μλ―Ένλ€.
κ·Έλ λ€λ©΄ Calculator μ»΄ν¬λνΈλ λ λλ§λ λλ§λ€ calculate()
ν¨μλ₯Ό νΈμΆνκ³ , λ³μ resultμ κ°μ ν λΉν΄μ£Όλ κ²μ λ§€λ² μννλ€λ κ²μ μλ―Ένλ€.
μ¦, μ»΄ν¬λνΈ λ λλ§μ΄ λ°μν λλ§λ€ λ§€λ² λͺ μ΄ μ΄μμ μκ°μ΄ μμλ κ²μ΄κ³ , μ΄λ λ§€μ° λΉν¨μ¨μ μ΄λ€.
function Calculator({ value }) { // propsλ‘ valueλ₯Ό λ°λλ€.
const result = calculate(value); // λ§€μ° λ³΅μ‘ν μ°μ°μ μννλ ν¨μ
return (
<>
<div>{result}</div>
</>
);
}
β‘οΈ μ΄λ, useMemo()
Hookμ μ¬μ©νλ©΄, μ΄μ μ ꡬμΆλ λ λλ§κ³Ό μλ‘κ² κ΅¬μΆλ λ λλ§μ λΉκ΅νμ¬ value
κ°μ΄ λμΌν κ²½μ°, μ°μ°μ λ λ€μ μννμ§ μκ³ μ΄μ λ λλ§μ value
κ°μ κ·Έλλ‘ νμ©ν μ μκ² νλ€.
useMemo()
λ λ©λͺ¨μ΄μ μ΄μ
(Memoization) κ°λ
μ νμ©ν΄ 볡μ‘ν μ°μ°μ μ€λ³΅μ νΌνκ³ React μ±μ μ±λ₯μ μ΅μ νμν¨λ€.useMemo()
Hookμ νΈμΆν΄ μ΄μ©νλ©΄ ν¨μ¬ κ°νΈνλ€.λ©λͺ¨μ΄μ μ΄μ (Memoization)
: κΈ°μ‘΄μ μνν μ°μ°μ κ²°κ³Όκ°μ λ©λͺ¨λ¦¬μ μ μ₯ν΄λκ³ , λμΌν μ λ ₯μ΄ λ€μ΄μ€λ©΄ μ¬νμ©νλ νλ‘κ·Έλλ° κΈ°λ²
λ©λͺ¨μ΄μ μ΄μ μ μ μ ν νμ©νλ©΄, μ€λ³΅ μ°μ°μ ν νμκ° μμ΄μ§κΈ° λλ¬Έμ μ±μ μ±λ₯μ μ΅μ νν μ μλ€.
: λ©λͺ¨μ΄μ μ΄μ λ κ°μ λ°ννλ Hook
useMemo(() => {}, [])
: 첫 λ²μ§Έ μΈμλ‘ μ½λ°± ν¨μ, λ λ²μ§Έ μΈμλ‘ μ’
μμ± λ°°μ΄μ κ°λλ€.
μ½λ°± ν¨μλ λ©λͺ¨μ΄μ μ΄μ
ν κ°μ 리ν΄ν΄μ£Όλ ν¨μμ΄λ©°,
μ΄ ν¨μκ° λ¦¬ν΄νλ κ°μ΄ 곧 useMemo()
κ° λ¦¬ν΄ν΄μ£Όλ κ°μ΄ λλ€.
useMemo()
λ μ’
μμ± λ°°μ΄ μμ μλ μμμ κ°μ΄ μ
λ°μ΄νΈλ λλ§ μ½λ°± ν¨μλ₯Ό νΈμΆνκ³ , λ©λͺ¨μ΄μ μ΄μ
λ κ°μ μ
λ°μ΄νΈ νλ€.
import { useMemo } from "react";
function Calculator({ value }) {
const result = useMemo(() => calculate(value), [value]);
// μ»΄ν¬λνΈκ° 리λ λλ§λμ΄λ, valueκ°μ΄ λμΌνλ€λ©΄ μ°μ°μ μννμ§ μκ³ μ΄μ κ°μ κ·Έλλ‘ μ¬μ©νλ€.
return (
<>
<div>{result}</div>
</>
);
}
μλ μ½λμμ μ½μμ°½μ μ΄κ³ μλ κ³μ°κΈ°μ μκ΄ μλ λ²νΌ
μ ν΄λ¦ν΄λ³΄λ©΄,
μ»΄ν¬λνΈ μ 체 리λ λλ§μ΄ μΌμ΄λλ©° λΆνμνκ² add()
ν¨μκ° μ€νλλ κ²μ λ³Ό μ μλ€.
β¬οΈ
add()
ν¨μμ useMemo()
λ₯Ό μ¬μ©ν΄λ³΄λ©΄...
μλ κ³μ°κΈ°μ μκ΄ μλ λ²νΌ
μ λλ¬μ μ»΄ν¬λνΈ μ 체 리λ λλ§μ΄ μΌμ΄λλλΌλ, val1
, val2
κ°μ΄ μ
λ°μ΄νΈ λμ§ μμμΌλ―λ‘ add()
ν¨μλ μ€νλμ§ μλλ€. π
useMemo()
λ μ½λ°± ν¨μκ° λ¦¬ν΄ν κ°μ λ©λͺ¨μ΄μ μ΄μ
νλ Hookμ΄λΌλ©΄, useCallback()
μ μ½λ°± ν¨μ μ체λ₯Ό λ©λͺ¨μ΄μ μ΄μ
νλ Hookμ΄λ€.
: λ©λͺ¨μ΄μ μ΄μ λ μ½λ°±μ λ°ννλ Hook
useCallback(() => {}, [])
: 첫 λ²μ§Έ μΈμλ‘ μ½λ°± ν¨μ, λ λ²μ§Έ μΈμλ‘ μ’
μμ± λ°°μ΄μ κ°λλ€.
μμ Reactμμ μ»΄ν¬λνΈκ° λ λλ§λλ€λ κ²μ ν¨μ λ΄λΆμ λͺ¨λ λ³μκ° μ΄κΈ°νλλ κ²μ΄λΌκ³ μ€λͺ
νλ€.
JavaScriptμμ ν¨μλ κ°μ²΄μ ν μ’
λ₯λ‘, ν¨μκ° κ°μ²΄μ΄κΈ° λλ¬Έμ λ³μμ ν λΉν μ μλ κ²μ΄λ€.
μλμ μ½λμμ λ§μ½ μ»΄ν¬λνΈ λ¦¬λ λλ§μ΄ λ°μνλ©΄, double
μ΄λΌλ λ³μμ ν λΉλ ν¨μ κ°μ²΄ λν μ΄κΈ°νλλ€.
κ·Έλ¦¬κ³ , μλ‘μ΄ ν¨μ κ°μ²΄κ° μμ±λμ΄ λ€μ double
μ΄λΌλ λ³μμ ν λΉλλ κ²μ΄λ€.
μ¦, λ λλ§λ λλ§λ€ λ§€λ² μλ‘μ΄ ν¨μ κ°μ²΄κ° ν λΉλλ€.
const double = (num) => {
return num * 2;
};
μ΄λ, useCallback()
μ μ¬μ©ν΄μ ν¨μ κ°μ²΄λ₯Ό λ©λͺ¨μ΄μ μ΄μ
ν΄μ£Όλ©΄, μ»΄ν¬λνΈκ° 리λ λλ§λμ΄λ λ³μ double
μ΄ μ΄κΈ°νλλ κ²μ λ§κ³ , λ©λͺ¨μ΄μ μ΄μ
λ ν¨μλ₯Ό λ€μ μ¬μ©ν μ μκ² νλ€.
const double = useCallback((num) => {
return num * 2;
}, [value]);
μ΄λ κ² λ©λͺ¨μ΄μ μ΄μ λ ν¨μλ μ’ μμ± λ°°μ΄ μμ μλ μμμ κ°μ΄ λ³κ²½λμ§ μλ μ΄μ λ€μ μ΄κΈ°νλμ§ μκ³ , λ³κ²½λμμ λλ§ μλ‘κ² ν λΉλλ€.
μμ μ»΄ν¬λνΈμ propsλ‘ ν¨μλ₯Ό μ λ¬ν΄μ€ λ useCallback()
μ μ¬μ©νλ©΄, λΆλͺ¨ μ»΄ν¬λνΈκ° 리λ λλ§λ λλ§λ€ κ°μ κ°μ 리ν΄νλ ν¨μλ₯Ό λΆνμνκ² νΈμΆνλ κ²μ λ§μ μ μλ€.
quantity
μνκ° μ
λ°μ΄νΈ λλ©° μ»΄ν¬λνΈ λ¦¬λ λλ§μ΄ μΌμ΄λλ€.getItems()
ν¨μκ° μλ‘κ² λ§λ€μ΄μ§λ€. useEffect
λ μ’
μμ± λ°°μ΄ μμ getItems
λ₯Ό κ°μ§κ³ μμΌλ―λ‘, getItems()
ν¨μλ₯Ό νΈμΆνλ€.λ¬Έμ λ μλ μ₯λ°κ΅¬λμ μκ΄ μλ λ²νΌ
μ λλ μ λλ μ»΄ν¬λνΈ μ 체 리λ λλ§μ΄ μΌμ΄λλ©° λΆνμνκ² getItems()
ν¨μκ° μ€νλλ€λ μ μ΄λ€.
β¬οΈ
getItems()
ν¨μμ useCallback()
λ₯Ό μ¬μ©ν΄λ³΄λ©΄...
μλ μ₯λ°κ΅¬λμ μκ΄ μλ λ²νΌ
μ λλ¬μ μ»΄ν¬λνΈ μ 체 리λ λλ§μ΄ μΌμ΄λλλΌλ, getItems()
ν¨μλ quantity
κ°μ΄ μ
λ°μ΄νΈ λμ§ μλ ν μ€νλμ§ μλλ€. π
μ΄ κΈμ μλ λ§ν¬λ₯Ό μ°Έκ³ νμ¬ μμ±ν κΈμ
λλ€.
https://youtu.be/e-CnI8Q5RY4
https://youtu.be/XfUF9qLa3mU