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๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

const Description = memo(() => {
  return <p>Click the button</p>;
});

Description ์ปดํฌ๋„ŒํŠธ๋ฅผ ์œ„์™€ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜๋ฉด, CounterButton์„ ํด๋ฆญํ•ด๋„ Description ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š”๋‹ค.

memo๋Š” ๋งŒ๋Šฅ์ด ์•„๋‹ˆ๋‹ค

์ปดํฌ๋„ŒํŠธ๋ฅผ memo๋กœ ๊ฐ์ŒŒ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๋ฆฌ๋ Œ๋”๋ง๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋‹ค.

  1. props๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ

const CounterButton = memo(({ count, onClick }) => {
  return <button onClick={onClick}>Clicked {count} times!</button>;
});

CounterButton ์ปดํฌ๋„ŒํŠธ๋Š” count ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋ฆฌ๋ Œ๋”๋ง๋œ๋‹ค. onClick ํ•จ์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ๋‹น์—ฐํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ด๋Š” ์˜๋„๋˜์ง€ ์•Š์€ ๋™์ž‘์„ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

React๋Š” ์–•์€ ๋น„๊ต๋ฅผ ํ†ตํ•ด props๋ฅผ ๋น„๊ตํ•œ๋‹ค. ์–•์€ ๋น„๊ต๋กœ ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด, ํ•จ์ˆ˜๋ฅผ ๋น„๊ตํ•˜๋ฉด, ์ด์ „์˜ ๊ฐ’๊ณผ ๋™์ผํ•˜๋”๋ผ๋„ ์ฐธ์กฐ๊ฐ€ ๋™์ผํ•œ์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋ฅผ ๋”ฐ์ง„๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ Œ๋”๋งํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ์ฒด, ๋ฐฐ์—ด, ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•œ๋‹ค๋ฉด memo๋œ ์ปดํฌ๋„ŒํŠธ ๋˜ํ•œ props๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ด ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด useMemo, useCallback์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ดํ›„ ์„ค๋ช…ํ•  arePropsEqual ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ

  2. arePropsEqual ๊ฐ’์ด false์ผ ๋•Œ

memo HOC(๊ณ ์ฐจ ์ปดํฌ๋„ŒํŠธ)์—๋Š” ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ arePropsEqual ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

const Chart = memo(({ points }) => {
    ...
}, (oldProps, newProps) => {
  return (
    oldProps.points.length === newProps.points.length &&
    oldProps.points.every((oldPoint, index) => {
      const newPoint = newProps.points[index];
      return oldPoint.x === newPoint.x && oldPoint.y === newPoint.y;
    })
  );
});

์œ„ ์˜ˆ์ œ์˜ arePropsEqual ํ•จ์ˆ˜๋Š” points ๊ฐ์ฒด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด, ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด true, ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฐธ์กฐ๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— points๊ฐ€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์žฌ์ƒ์„ฑ๋˜์–ด ์ฐธ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„, ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด Chart ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฆฌ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š”๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ• ๋˜ํ•œ ๋งŒ๋Šฅ์€ ์•„๋‹ˆ๋‹ค. React ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋Š” arePropsEqual ์‚ฌ์šฉ ์‹œ ๋ชจ๋“  props๋ฅผ ๋น„๊ตํ•ด์•ผ ํ•˜๋ฉฐ, prop์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๊นŠ์ด๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊นŠ์€ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ง๋ผ๊ณ  ๊ถŒ๊ณ ํ•˜๊ณ  ์žˆ๋‹ค. (๊ณต์‹ ๋ฌธ์„œ)

  1. ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ Context๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์„ ๋•Œ

const CounterButton = memo(({ onClick }) => {
  const { count } = useContext(globalContext);
  
  return <button onClick={onClick}>Clicked {count} times!</button>;
});

์œ„ ์˜ˆ์ œ์—์„œ globalContext์˜ count ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด CounterButton์ด ๋ฆฌ๋ Œ๋”๋ง๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ globalContext์— ๋‹ค๋ฅธ ์ƒํƒœ๊ฐ€ ์กด์žฌํ•˜๊ณ , ์ด ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด CounterButton์—์„œ ๊ทธ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š์Œ์—๋„ ๋ฆฌ๋ Œ๋”๋ง๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ useContext ์‚ฌ์šฉ๋ถ€๋ฅผ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ ์ด๋™์‹œ์ผœ, count๋ฅผ props๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

useMemo

๋ฆฌ๋ Œ๋”๋ง ๊ฐ„์— ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•œ๋‹ค. - React ๊ณต์‹ ๋ฌธ์„œ

const Chart = ({ data, ... }) => {
    const points = calculatePoints(data);

    const memorizedPoints = useMemo(
        () => calculatePoints(data),
        [data]
    );
    
    return <ChartInner points={points} />
}

const ChartInner = memo(({ points }) => ...)

์œ„์˜ ์˜ˆ์ œ์—์„œ 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์€ ํ•จ์ˆ˜๋ฅผ ์บ์‹ฑํ•œ๋‹ค.

const handleClick1 = useCallback(() => {
    setCounter(prev => prev + 1);
}, []);

const handleClick2 = useMemo(() => {
    return () => setCounter(prev => prev + 1);
}, []);

์œ„ ์˜ˆ์ œ์—์„œ ๋‘ ํ•จ์ˆ˜์˜ ์ž‘๋™์€ ๋™์ผํ•˜๋‹ค. ํ•˜์ง€๋งŒ ํ•จ์ˆ˜๋ฅผ ์บ์‹ฑํ•  ๋•Œ๋Š” ํ•จ์ˆ˜์šฉ์œผ๋กœ ์ œ๊ณต๋˜๋Š” useCallback์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋…์„ฑ ๋ฉด์—์„œ ์ข‹๋‹ค.

useMemo์™€ ๋™์ผํ•˜๊ฒŒ memo๋กœ ๊ฐ์‹ธ์ง„ ์ปดํฌ๋„ŒํŠธ์˜ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์˜์กด์„ฑ ๋ฐฐ์—ด์˜ ์–•์€ ๋น„๊ต๋ฅผ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

์ „๋ถ€ ๋ฉ”๋ชจํ•ด์•ผ ํ• ๊นŒ?

memo, useMemo, useCallback์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. ์ด ์ตœ์ ํ™” ๊ธฐ๋ฒ•๋“ค์€ ์–ธ์ œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ? ๋ Œ๋”๋ง์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ? ๊ณ„์‚ฐ ๋กœ์ง์ด ๋ณต์žกํ•œ ์ปดํฌ๋„ŒํŠธ? ํŒ๋‹จํ•˜๊ธฐ ์–ด๋ ค์šฐ๋‹ˆ ์ „๋ถ€ ๋‹ค?

๋ฉ”๋ชจ์ด์ œ์ด์…˜์˜ ๊ธฐ์ค€์— ๋Œ€ํ•ด์„œ๋Š” ์—ฌ๋Ÿฌ ์˜๊ฒฌ์ด ์กด์žฌํ•˜๊ณ , ์–ด๋–ค ๊ฒƒ์ด ์„ฃ๋ถˆ๋ฆฌ ์ข‹๋‹ค๋ผ๊ณ  ๋งํ•˜๊ธฐ ์–ด๋ ค์šด ์ฃผ์ œ์ด๊ธฐ๋„ ํ•˜๋‹ค. React ํŒ€์—์„œ๋Š” ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๋˜ํ•œ ๋น„์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ๋Œ€์ฒดํ•˜๋Š” ๋ฐฉ์‹๋“ค์„ ์ œ์•ˆํ•œ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ์›์น™์„ ๋”ฐ๋ฅด๋ฉด ๋งŽ์€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๊ฐ์‹ธ๊ณ  ์žˆ๋‹ค๋ฉด JSX๋ฅผ ์ž์‹์œผ๋กœ ๋ฐ›๊ฒŒ ํ•˜์„ธ์š”. ๊ฐ์‹ธ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์˜ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด, React๋Š” ์ž์‹๋“ค์€ ๋ฆฌ๋ Œ๋”๋งํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  2. ๊ฐ€๋Šฅํ•œ ํ•œ ๋กœ์ปฌ ์ƒํƒœ๋ฅผ ์„ ํ˜ธํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์ƒํƒœ ๊ณต์œ ๋ฅผ ํ•„์š” ์ด์ƒ์œผ๋กœ ํ•˜์ง€ ๋งˆ์„ธ์š”. ํผ์ด๋‚˜ ํ•ญ๋ชฉ์ด ํ˜ธ๋ฒ„๋˜์—ˆ๋Š”์ง€์™€ ๊ฐ™์€ ์ผ์‹œ์ ์ธ ์ƒํƒœ๋ฅผ ํŠธ๋ฆฌ์˜ ์ƒ๋‹จ์ด๋‚˜ ์ „์—ญ ์ƒํƒœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์œ ์ง€ํ•˜์ง€ ๋งˆ์„ธ์š”.

  3. ๋ Œ๋”๋ง ๋กœ์ง์„ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์œ ์ง€ํ•˜์„ธ์š”. ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๊ฑฐ๋‚˜ ๋ˆˆ์— ๋„๋Š” ์‹œ๊ฐ์ ์ธ ํ˜•์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋ฉด, ๊ทธ๊ฒƒ์€ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค! ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜์„ธ์š”.

  4. ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ถˆํ•„์š”ํ•œ Effects๋ฅผ ํ”ผํ•˜์„ธ์š”. React ์•ฑ์—์„œ ๋Œ€๋ถ€๋ถ„์˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๋Š” Effects๋กœ๋ถ€ํ„ฐ ๋ฐœ์ƒํ•œ ์—ฐ์†๋œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ณ„์†ํ•ด์„œ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ์ด ์›์ธ์ž…๋‹ˆ๋‹ค.

  5. Effects์—์„œ ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๋Œ€์‹  ๊ฐ์ฒด๋‚˜ ํ•จ์ˆ˜๋ฅผ Effect ์•ˆ์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ ์™ธ๋ถ€๋กœ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋” ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

- React ๊ณต์‹ ๋ฌธ์„œ

๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•œ ๋‹ค๋ฅธ ์ข‹์€ ๊ธ€๋„ ์ฒจ๋ถ€ํ•œ๋‹ค.

์ฐธ๊ณ  ๋ฌธ์„œ

Last updated