์ฆ์ ๋ฆฌ๋ ๋๋ง์ ์ฑ์ ์ฑ๋ฅ์ ์ํฅ์ ๋ผ์น๊ธฐ๋๋ฌธ์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ์ํ(๋ ๋๋ง ์ต์ ํ) Hook์ผ๋ก, useCallback๊ณผ useMemo๊ฐ ์ด์ ํด๋น๋๋ค.
useMemo๋ ํน์ ๊ฐ์ ์ฌ์ฌ์ฉํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ Hook์ด๋ค.
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
์์ ์์๋useMemo
์ฌ์ฉ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ก, ๋ ๋ฒ์งธ ์ธ์์ธ ์์กด์ฑ์ด ๋ณ๊ฒฝ๋์์๋๋ง ๋ค์ ํจ์๋ฅผ ํธ์ถํด ๊ณ์ฐํ๋ค.
import { useMemo } from "react";
function Calculator({value}){
const result = useMemo(() => calculate(value), [value]);
return
<>
<div>
{result}
</div>
</>;
}
์์ ์์๋ props๋ก ๋ฐ์ value
๊ฐ์ calculate
ํจ์์ ์ธ์๋ก ๋๊ฒจ์ result
๊ฐ์ ๊ตฌํ ํ์ <div>
element๋ก ์ถ๋ ฅํ๊ณ ์๋ ์ฝ๋์ด๋ค.
๋ง์ฝvalue
๊ฐ์ด ์ง์์ ์ผ๋ก ๋ฐ๋์ง ์๋๋ค๊ณ ๊ฐ์ ํ์ ๋, calculate
ํจ์๋ฅผ ๊ณ์ ํธ์ถํ ํ์์์ด useMemo
Hook์ ์ฌ์ฉํด calculate
์ ๊ฐ์ธ์ค๋ค๋ฉด, ์ด์ ์ ๊ตฌ์ถ๋ ๋ ๋๋ง๊ณผ ์๋ก ๊ตฌ์ถ๋๋ ๋ ๋๋ง์ ๋น๊ตํด value
๊ฐ์ด ๋์ผํ ๊ฒฝ์ฐ, ์ด์ ๋ ๋๋ง์ value
๊ฐ์ ๊ทธ๋๋ก ์ฌํ์ฉํ ์ ์๋ค.(๋ฉ๋ชจ์ ์ด์
(Memoization) ๊ฐ๋
๊ณผ ๋ฐ์ ํ ๊ด๊ณ๊ฐ ์๋ค.)
โญ ๋ฉ๋ชจ์ด์ ์ด์
(Memoization)?
๊ธฐ์กด์ ์ํํ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด๋๊ณ , ๋์ผํ ์
๋ ฅ์ด ๋ค์ด์ค๋ฉด ์ฌํ์ฉํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ผ๋ก, ์ค๋ณต ์ฐ์ฐ์ ์ค์ฌ ์ฑ์ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋ค.
// css ์๋ต
import React, { useState, useMemo } from "react";
import "./styles.css";
import { add } from "./add";
export default function App() {
const [name, setName] = useState("");
const [val1, setVal1] = useState(0);
const [val2, setVal2] = useState(0);
// useMemo์ฌ์ฉํด ์ต์ ํ
const answer = useMemo(()=>add(val1, val2),[val1, val2]);
// ์ต์ ํ๋์ง ์์ ์ฝ๋
//const answer = add(val1, val2);
return (
<div>
<input
className="name-input"
placeholder="์ด๋ฆ์ ์
๋ ฅํด์ฃผ์ธ์"
value={name}
type="text"
onChange={(e) => setName(e.target.value)}
/>
<input
className="value-input"
placeholder="์ซ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์"
value={val1}
type="number"
onChange={(e) => setVal1(Number(e.target.value))}
/>
<input
className="value-input"
placeholder="์ซ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์"
value={val2}
type="number"
onChange={(e) => setVal2(Number(e.target.value))}
/>
<div>{answer}</div>
</div>
);
}
// add.js
export const add = (num1, num2) => {
console.log("์ซ์๊ฐ ๋ค์ด์ต๋๋ค.");
return Number(num1) + Number(num2);
};
์์ ์ปดํฌ๋ํธ์์ ์ค์ ๋ก ์ฐ์ฐ ๋ก์ง์ ์ํฅ์ ์ฃผ๋ ๊ฐ์ val1
, val2
์ด๋ฏ๋ก, ์ด๋ฆ ์ํ๊ฐ ๋ณํ ๋๋ add
ํจ์๋ฅผ ๋ถํ์ํ๊ฒ ํธ์ถํ ํ์๊ฐ ์๋ค.
๋ฐ๋ผ์, useMemo
๋ฅผ ์ฌ์ฉํด ์ด๋ฆ์ ์
๋ ฅํ ๋๋ add
ํจ์๋ฅผ ํธ์ถํ์ง ์๋๋ก ์์ฑ๋ ์ฝ๋์ด๋ค.
Reference:
์ฝ๋์คํ ์ด์ธ