์‹œ์ž‘ํ•˜๋ฉฐ

React๋ฅผ ์ฃผ์–ธ์–ด๋กœ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š”๋ฐ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๋‹ค๋ณด๋‹ˆ Memoization์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„ ์ •๋ฆฌํ•ด๋ด…๋‹ˆ๋‹ค.

Memoization

  • ์ด์ „ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ์ €์žฅํ•ด๋‘๊ณ  ๋™์ผํ•œ ์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๋ฉด ์žฌํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  • Memoized ๋œ ๋‚ด์šฉ์„ ์žฌ์‚ฌ์šฉํ•  ์‹œ, ๊ฐ€์ƒ DOM์—์„œ ๋ฐ”๋€ ๋ถ€๋ถ„์„ ํ™•์ธํ•˜์ง€ ์•Š์•„ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋จ.

1. Redux

Recoil์ด ์•„๋ฌด๋ฆฌ ํŽธํ•˜๊ธด ํ•ด๋„ .. Redux ๊ณต๋ถ€๋„ ๊พธ์ค€ํžˆ ํ•ด์•ผ๊ฒ ๋‹ค ^^.

2. React.memo

์ปดํฌ๋„ŒํŠธ๋ฅผ React.memo()๋กœ ๋ž˜ํ•‘ ์‹œ, ๋ Œ๋”๋ง ๊ฒฐ๊ณผ๋ฅผ Memoizingํ•˜๊ณ  ๋‹ค์Œ ๋ Œ๋”๋ง์—์„œ Props๊ฐ€ ์ผ์น˜ํ•œ๋‹ค๋ฉด Memoizing๋œ ๋‚ด์šฉ์„ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

3. useMemo

React.memo์™€ ํก์‚ฌํ•œ๋ฐ useMemo๋Š” ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ Memoizingํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ์ค„์ž…๋‹ˆ๋‹ค.
(ํ•จ์ˆ˜๋ฅผ useMemo๋กœ ๋ž˜ํ•‘)

const computeExpensiveValue(a, b) = ๋น„์‹ผ ๊ฐ’ ๊ณ„์‚ฐ;
const memoizedValue = useMemo(() => computedExpensiveValue(a, b), [a, b]);

useMemo์˜ [dependency]๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ๋งŒ ๋‹ค์‹œ ๊ณ„์‚ฐํ•จ.

4. useCallback

useMemo๋Š” ํŠน์ • ๊ฒฐ๊ณผ ๊ฐ’์„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฐ˜๋ฉด, useCallback์€ ํŠน์ • ํ•จ์ˆ˜๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

const App = () => {
  const onToggle = useCallback(id => {
    setUsers(
      users.map(user =>
        user.id === id ? { ...user, active: !user.active } : user
      )
    );
  }, [users]);
  
  return <CreateUser onToggle={onToggle} />;
}

๋ฉ”๋ชจ์ œ์ด์…˜์šฉ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•˜๋ฏ€๋กœ, ๋ถˆํ•„์š”ํ•œ Props ๋น„๊ต๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ useCallback, useMemo, React.memo๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์„ฑ๋Šฅ์„ ์‹ค์ œ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ๋งŒ ์‚ฌ์šฉ