UseMemo

1. useMemo์˜ ์—ญํ• 

  • ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง์ด ๋  ๋•Œ๋งˆ๋‹ค ๋ฆฌ๋ Œ๋”๋ง์„ ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์กŒ์Œ

  • ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ์žฆ์€ ๋ฆฌ๋ Œ๋”๋ง์€ ์•ฑ์— ์ข‹์ง€ ์•Š์€ ์„ฑ๋Šฅ์„ ๋ผ์นจ

  • React Hook์€ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒํƒœ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ๋ฐ ์ตœ์ ํ™” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•˜๋Š” ๋ฉ”์†Œ๋“œ

  • ๊ทธ์ค‘ ๋ Œ๋”๋ง ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ Hook๋„ ์กด์žฌ โ†’ useCallback๊ณผ useMemo๊ฐ€ ๋ฐ”๋กœ ๊ทธ ์—ญํ• ์„ ํ•˜๋Š” Hook

2. useMemo๋ž€?

  • useMemo์€ ํŠน์ • ๊ฐ’(value)์„ ์žฌ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Hook์ž„.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜ ์ปดํฌ๋„ŒํŠธ๋Š” props๋กœ ๋„˜์–ด์˜จ value๊ฐ’์„ calculate๋ผ๋Š” ํ•จ์ˆ˜์— ์ธ์ž๋กœ ๋„˜๊ฒจ์„œ result ๊ฐ’์„ ๊ตฌํ•œ ํ›„, <div> ์—˜๋ฆฌ๋จผํŠธ๋กœ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด,

    function Calculator({value}) {
      const result = calculate(value);
      return <>
        <div>
          {result}
        </div>
      </>;
    }
  • ๋งŒ์•ฝ ์œ„ calculate๊ฐ€ return์— ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๋ฉด, ์ปดํฌ๋„ŒํŠธ๋Š” ๋ Œ๋”๋ง์„ ํ•  ๋•Œ๋งˆ๋‹ค ์ด ํ•จ์ˆ˜๋ฅผ ๊ณ„์†ํ•ด์„œ ํ˜ธ์ถœํ•˜๋ฉด์„œ ๋กœ๋”ฉ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚  ๊ฒƒ์ด๊ณ , ๊ฒฐ๊ตญ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ข‹์ง€ ์•Š์€ ๊ฒฝํ—˜์„ ์ค„ ์ˆ˜ ์žˆ์Œ

    import { useMemo } from "react";
    const result = useMemo(() => calculate(value), [value]);
      return <>
        <div>
          {result}
        </div>
      </>;
  • ์œ„ Calculator ์ปดํฌ๋„ŒํŠธ์˜ value๋Š” ์ผ์ข…์˜ ๊ฐ’์œผ๋กœ์„œ, ๋ Œ๋”๋ง์„ ํ•  ๋•Œ๋งˆ๋‹ค ์ด value๊ฐ’์ด ๊ณ„์† ๋ฐ”๋€Œ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด & ๊ฐ’์„ ์–ด๋”˜๊ฐ€์— ์ €์žฅ์„ ํ•ด๋’€๋‹ค๊ฐ€ ๋‹ค์‹œ ๊บผ๋‚ด์„œ ์“ธ ์ˆ˜๋งŒ ์žˆ๋‹ค๋ฉด ๊ตณ์ด calculate ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ํ•„์š”๋„ ์—†์„ ๊ฒƒ์ž„

  • ์—ฌ๊ธฐ์„œ useMemo Hook์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

  • useMemo๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ calculate๋ฅผ ๊ฐ์‹ธ์ฃผ๋ฉด, ์ด์ „์— ๊ตฌ์ถ•๋œ ๋ Œ๋”๋ง๊ณผ ์ƒˆ๋กœ์ด ๊ตฌ์ถ•๋˜๋Š” ๋ Œ๋”๋ง์„ ๋น„๊ตํ•ด value๊ฐ’์ด ๋™์ผํ•  ๊ฒฝ์šฐ โ†’ ์ด์ „ ๋ Œ๋”๋ง์˜ value๊ฐ’ ์žฌํ™œ์šฉ ๊ฐ€๋Šฅ(Memoization)

3. Memoization ์ด๋ž€?

  • ๊ธฐ์กด์— ์ˆ˜ํ–‰ํ•œ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ์„ ํ•ด๋‘๊ณ , ๋™์ผํ•œ ์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๋ฉด ์žฌํ™œ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•

  • ์ด ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ตณ์ด ์ค‘๋ณต ์—ฐ์‚ฐ ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์•ฑ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ฐ€๋Šฅ โ†’ useMemo๊ฐ€ ํ™œ์šฉ

  • ์ง์ ‘ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๊ฐœ๋…์„ ์ด์šฉํ•ด ๋กœ์ง ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‚˜, useMemo Hook ํ˜ธ์ถœ ์‹œ ๋กœ์ง ๊ตฌํ˜„์„ ๋Œ€์‹ ํ•ด ์ฃผ๊ธฐ์— ํ›จ์”ฌ ๊ฐ„ํŽธํ•จ.

Last updated