useMemo()
1. κ°μ
useMemo()λ μ»΄ν¬λνΈμ μ΅μ νλ₯Ό μν€κΈ° μν΄ μ¬μ©λλ hook μ€ νλμ΄λ€. useMemo()μμ Memoλ Memoizationμ λ»νλλ° μ΄λ κΈ°μ‘΄μ μνν μ°μ°μ κ²°κ³Όκ°μ μ΄λκ°μ μ μ₯ν΄ λκ³ λμΌν μ
λ ₯μ΄ λ€μ΄μ€λ©΄ μ¬νμ©νλ νλ‘κ·Έλλ° κΈ°λ²μ λ§νλ€.
2. useMemo()λ₯Ό μ¬μ©νμ§ μλ μ»΄ν¬λνΈμ λλλ§
ν¨μν μ»΄ν¬λνΈλ λ§ κ·Έλλ‘ νλμ ν¨μμ΄λ€. μ¦, λλλ§μ΄ λλ€λ κ²μ ν¨μκ° νΈμΆμ΄ λκ³ ν¨μ λ΄λΆμμ μ μΈλ λ³μλ μ΄κΈ°νκ° λλ€.
μλμ κ°μ μ»΄ν¬λνΈκ° μλ€κ³ κ°μ νμ.
import React from "react";
const Test = () => {
const calculate = () => {
// μμ²λκ² λ³΅μ‘ν λ‘μ§
console.log("λ μ§κΈ ν¨μ μ€ννκ³ μμ΄!");
return 10;
};
const result = calculate();
return <div>{result}</div>;
};
export default Test;μμ μ½λλ₯Ό 보면 App μ»΄ν¬λνΈκ° λλλ§μ΄ λλ©΄ resultμ calculate()ν¨μκ° μ€νλμ΄ λ¦¬ν΄κ°μ΄ ν λΉλλ€.
μ»΄ν¬λνΈλ₯Ό 리λλλ§μμΌλ³΄μ. μ»΄ν¬λνΈκ° 리λλλ§μ state, propsμ λ³νκ° μμ λ νλ€. μ¬κΈ°μλ κ°λ¨ν stateλ₯Ό λ³νμμΌ λ¦¬λλλ§μ ν΄λ³΄μ.
μλμ κ°μ΄ μ½λλ₯Ό μΆκ° μμ±νλ€.
import React, { useState } from "react";
const Test = () => {
const [render, setRender] = useState(false);
const calculate = () => {
// μμ²λκ² λ³΅μ‘ν λ‘μ§
console.log("λ μ§κΈ ν¨μ μ€ννκ³ μμ΄!");
return 10;
};
const result = calculate();
const onClickBtn = () => setRender((prev) => !prev);
return (
<div>
{result}
<button onClick={onClickBtn}>리λλλ§</button>
</div>
);
};
export default Test;μ΄μ 리λλλ§ λ²νΌμ λλ₯Ό λ λ§λ€ stateκ°μ΄ λ³νκ² λμ΄ μ»΄ν¬λνΈκ° 리λλλ§ λλ€. μλμ μ½μμ 보μ.

μ»΄ν¬λνΈκ° 리λλλ§ λ λλ§λ€ calculate()ν¨μκ° λ€μ νΈμΆλλ κ²μ λ³Ό μ μλ€. λμ 보μ΄λ resultκ°μ κ°μ§λ§ 리λλλ§ λ λλ§λ€ λ³μκ° μ΄κΈ°ν λκΈ° λλ¬Έμ calculate()ν¨μκ° λ°λ³΅μ μΌλ‘ νΈμΆμ΄ λλ€. λ§μ½ calculate()ν¨μκ° λ¬΄κ±°μ΄ μΌμ νκ² λλ€λ©΄ λΉν¨μ¨μ μΈ κ³Όμ μ κ³μν΄μ κ±°μΉκ² λλ κ²μ΄λ€. μ΄λ₯Ό ν΄κ²°ν μ μλ κ²μ΄ λ°λ‘ useMemo()μ΄λ€.
3. useMemo()λ₯Ό μ¬μ©ν μ»΄ν¬λνΈμ λλλ§
μ΄λ²μλ useMemo()λ₯Ό μ¬μ©νμ¬ μ»΄ν¬λνΈλ₯Ό λλλ§ ν΄λ³΄μ.
λ¨Όμ useMemo()μ κΈ°λ³Έ μ¬μ©λ²μ μλμ κ°λ€.
μ¬μ©λ² const value = useMemo(function, deps)
function: Memoizationμ ν κ°μ κ³μ°ν΄μ 리ν΄ν΄ μ€ μ½λ°±ν¨μ
deps: μμ‘΄μ± λ°°μ΄λ‘
useEffect()μ depsμ κ°λ€.
2. useMemo()λ₯Ό μ¬μ©νμ§ μλ μ»΄ν¬λνΈμ λλλ§μμ μμ±ν μ½λ μ€ const result = calculate();λ₯Ό μλμ κ°μ΄ μμ νμ.
const result = useMemo(() => {
return calculate();
}, []);calculate()ν¨μμ returnκ°μ Memoizationμ νμ¬ resultμ ν λΉνκ³ μλ€. κ·Έλ¦¬κ³ μμ‘΄μ± λ°°μ΄μ λΉμ΄μκΈ° λλ¬Έμ μ»΄ν¬λνΈκ° μ²μ μμ±λ λλ§ useMemo()μ μ½λ°±ν¨μκ° μ€νλλ€.
μμ κ°μ΄ μμ ν ν μ무리 리λλλ§ λ²νΌμ λλ¬λ calculate()ν¨μκ° νΈμΆλμ§ μλλ€.
λ§μ½ μμ‘΄μ± λ°°μ΄μ μ΄λ ν κ°μ΄ μλ€λ©΄ κ·Έ κ°μ΄ λ³ν λ λ§λ€ μ½λ°±ν¨μλ₯Ό λ€μ νΈμΆνλ€. ν΄λΉ κ²½μ°λ₯Ό μ½λμ ν¨κ» μ΄ν΄λ³΄μ. μλμ κ°μ΄ μ½λλ₯Ό μΆκ° λ° μμ νλ€.
import React, { useState, useMemo, useEffect } from "react";
const Test = () => {
const [render, setRender] = useState(false);
const [num, setNum] = useState(1);
const calculate = () => {
// μμ²λκ² λ³΅μ‘ν λ‘μ§
console.log("λ μ§κΈ ν¨μ μ€ννκ³ μμ΄!");
return num * 20;
};
const result = useMemo(() => {
return calculate();
}, [num]);
const onClickPlusBtn = () => setNum((prev) => prev + 1);
const onClickBtn = () => setRender((prev) => !prev);
useEffect(() => {
console.log("μ»΄ν¬λνΈκ° λλλ§ λμμ΅λλ€.");
}, [render, num]);
return (
<div>
{result}
<button onClick={onClickPlusBtn}>Plus</button>
<button onClick={onClickBtn}>리λλλ§</button>
</div>
);
};
export default Test;μ΄λ²μλ useMemo()μ μμ‘΄μ± λ°°μ΄μ numκ°μ μΆκ° νμκ³ numκ°μ stateμΌλ‘ Plus λ²νΌμ λλ₯΄ λ λ§λ€ μ¦κ°νλ€. μ¦, useMemo()μ μ½λ°±ν¨μλ Plus λ²νΌμ λλ¬ numκ°μ΄ μ¦κ°νκ² λλ©΄ λ€μ νΈμΆμ΄ λμ΄ μλ‘μ΄ resultκ°μ κ°μ§κ² λλ€. νμ§λ§ μ¬μ ν 리λλλ§ λ²νΌμ λλ₯Ό λμλ μ½λ°±ν¨μκ° λ€μ νΈμΆ λμ§ μλλ€.
μλλ κ°κ°μ λ²νΌμ λλ μ λ λνλλ μ½μμ λͺ¨μ΅μ΄λ€.

4. useMemo()λ₯Ό νμ μ¬μ©νμ¬ λλλ§ μ΅μ νλ©΄ μ’μκ±ΈλΌ?
μ λ΅μ κ·Έλ μ§ μλ€. κ°μ μ¬νμ©νκΈ° μν΄ λ°λ‘ λ©λͺ¨λ¦¬λ₯Ό μλΉνμ¬ μ μ₯μ νκΈ° λλ¬Έμ λΆνμν κ°κΉμ§ λͺ¨λ useMemo()λ₯Ό μ¬μ©νμ¬ Memoizationμ νκ² λλ€λ©΄ μ€νλ € μ±λ₯μ λ μ μ’μμ§ μ μλ€. κ·Έλ κΈ° λλ¬Έμ κΌ νμν λμλ§ μ μ νκ² useMemo()λ₯Ό μ¬μ©ν΄μΌ νλ€.
5. Conclusion
리μ‘νΈλ‘ μ¬λ¬ νλ‘μ νΈλ₯Ό μ§ννμ§λ§
useMemo()λ₯Ό μ¬μ©ν μ μ ν λ²λ μμλ€. κ·Έ μ΄μ λ 첫 λ²μ§ΈuseMemo()μ λν΄ λͺ°λκ³ , λ λ²μ§Έ λλλ§ μ΅μ νμ λν κ³ λ―Όμ ν΄ λ³Έ μ μ΄ μκΈ° λλ¬Έμ΄λ€. κ·Έλμ μ§κΈκΉμ§ μ§ννλ κ·Έλ¦¬κ³ μ§ννκ³ μλ 리μ‘νΈ νλ‘μνΈλ₯Ό 리ν©ν λ§ ν λ λλλ§ μ΅μ νκ° νμνλ€λ©΄ μ κ·Ήμ μΌλ‘useMemo()λ₯Ό μ¬μ©ν κ³νμ΄λ€. κ·Έλ λ€κ³ 무λΆλ³νκ² μ¬μ©μ νμ§ μμκ±°λ€.π
μ°Έκ³
17. useMemo λ₯Ό μ¬μ©νμ¬ μ°μ°ν κ° μ¬μ¬μ©νκΈ° [React] useMemo μ¬μ©λ² λ° μμ
λμμ΄ λ§μ΄ λμλ μ νλΈ π¬
π 2022-08-02
Last updated
