ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • React.memo, useMemo, useCallback ์–ธ์ œ ์จ์•ผ ํ• ๊นŒ?
    ๐Ÿ’ป๊ฐœ๋ฐœ/React 2024. 9. 22. 18:47
    728x90

    1. ์›น์—์„œ ๋ Œ๋”๋ง์ด๋ž€?

    • ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML, CSS, Javascript ๋“ฑ์˜ ์›น ์ž์›์„ ํ•ด์„ํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹œ์ž‘์ ์œผ๋กœ ํ‘œ์‹œํ•˜๋Š” ๊ณผ์ •
    • ์ฃผ์š” ๋‹จ๊ณ„
      1. HTML ํŒŒ์‹ฑ -> DOM(Document Object Model) ํŠธ๋ฆฌ ์ƒ์„ฑ
        DOM: ๋ฌธ์„œ ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ, ๊ฐ ์š”์†Œ๋Š” ๋…ธ๋“œ๋กœ ํ‘œํ˜„
      2. CSS ํŒŒ์‹ฑ -> CSSOM(CSS Object Model) ํŠธ๋ฆฌ ์ƒ์„ฑ
        ์Šคํƒ€์ผ ๊ทœ์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ ์š”์†Œ์— ์ ์šฉ๋  ์Šคํƒ€์ผ ์ •๋ณด ํฌํ•จ
      3. Render ํŠธ๋ฆฌ ์ƒ์„ฑ
        DOM + CSSOM = Render ํŠธ๋ฆฌ
        ํ™”๋ฉด์— ์‹ค์ œ๋กœ ํ‘œ์‹œ๋  ์š”์†Œ๋งŒ ํฌํ•จ, ๊ฐ ์š”์†Œ ์Šคํƒ€์ผ ํฌํ•จ(display: none ์ด๋ฉด ํฌํ•จ ์•ˆ๋จ)
      4. Layout (Reflow)
        ๊ฐ ์š”์†Œ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •, ํ™”๋ฉด ๋ฐฐ์น˜ ๊ฒฐ์ •(DOM, CSSOM์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋‹ค์‹œ ์ˆ˜ํ–‰๋จ)
      5. Painting
        Layout(๊ณ„์‚ฐ)์ด ์™„๋ฃŒ๋˜๋ฉด ์‹ค์ œ๋กœ ํ™”๋ฉด์— ์ƒ‰์ƒ, ํ…์Šค์ฒ˜, ๊ทธ๋ฆผ์ž ๋“ฑ ์‹œ๊ฐ์  ์š”์†Œ๋ฅผ ํ”ฝ์…€๋กœ ๋ณ€ํ™˜, =๋ ˆ์ด์–ด ์ƒ์„ฑ, ์‹ค์ œ๋กœ ์‚ฌ์šฉ์ž ํ™”๋ฉด์— ๋ณด์ด๋Š” ๊ฒƒ์ด ์•„๋‹˜(DOM, CSSOM์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋‹ค์‹œ ์ˆ˜ํ–‰๋จ)
      6. Compositing
        ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด๋ฅผ ๊ฒฐํ•ฉํ•ด ์ตœ์ข… ํ™”๋ฉด ์ƒ์„ฑ, GPU ์‚ฌ์šฉํ•ด ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ฐ€๋Šฅ, ์• ๋‹ˆ๋ฉ”์ด์…˜, transform ๋“ฑ์˜ ์š”์†Œ๋Š” ๋ณ„๋„ ๋ ˆ์ด์–ด๋กœ ์ฒ˜๋ฆฌ

    2. ๋ Œ๋”๋ง์„ ์ž์ฃผ ๋งŽ์ด ํ•˜๊ฒŒ ๋˜๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ๊นŒ?

    • ์†๋„ ์ €ํ•˜
      ๋ Œ๋”๋ง์€ CPU์™€ GPU ์ž์›์„ ์†Œ๋ชจํ•˜๋Š” ์ž‘์—…, ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ Œ๋”๋ง์„ ์ž์ฃผ ๋งŽ์ดํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ˜์‘ ์†๋„๊ฐ€ ๋Š๋ ค์ง
    • ์ž์› ์‚ฌ์šฉ๋Ÿ‰ ๋งŽ์•„์ง
      ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์‚ฌ์šฉ๋Ÿ‰์ด ๋งŽ์•„์ง, ํŠนํžˆ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ๋‚˜ ์ €์‚ฌ์–‘ ๊ธฐ๊ธฐ์—์„œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋จ
    • ์ธํ„ฐํŽ˜์ด์Šค ๋Š๊น€
      ๋ Œ๋”๋ง์ด ์ž์ฃผ ๋ฐœ์ƒํ•˜๋ฉด UI๊ฐ€ ๊นœ๋นก์ด๊ฑฐ๋‚˜ ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ์Œ
    • ์ง€์—ฐ ์‹œ๊ฐ„ ์ฆ๊ฐ€
      ๋ Œ๋”๋ง์ด ๋Š˜๋ฉด ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋Œ€ํ•œ ๋ฐ˜์‘ ์‹œ๊ฐ„์ด ๋Š๋ ค์ ธ, ์‚ฌ์šฉ์ž๊ฐ€ ๋Š๋ผ๋Š” ์ง€์—ฐ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€

    => ๋‚˜์œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณต! ๋ Œ๋”๋ง์„ ์ตœ์†Œํ™”ํ•˜๋ฉด ๋ฐ˜๋Œ€๋กœ ์ข‹์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณต


    3. ๋ฆฌ์•กํŠธ์˜ ๋ Œ๋”๋ง ๋ชจ๋ธ&๋ฌธ์ œ

    • ๋ Œ๋”๋ง ๋ชจ๋ธ
      ๋ฆฌ์•กํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ์ƒํƒœ(state)๋‚˜ props๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•จ
    • ๋ฌธ์ œ
      • ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง: ์ƒํƒœ๋‚˜ props๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋˜๋ฉด ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋„ ๋‹ค์‹œ ๋ Œ๋”๋ง๋จ
      • ๋น„์‹ผ ๊ณ„์‚ฐ: ํŠน์ • ์ปดํฌ๋„ŒํŠธ์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณ„์‚ฐ์ด ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋˜๋Š” ๊ฒฝ์šฐ, ๋งค๋ฒˆ ๋ Œ๋”๋งํ•  ๋•Œ๋งˆ๋‹ค ์ด ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ž„

    4. ๋ฆฌ์•กํŠธ์—์„œ ๋ Œ๋”๋ง์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•

    1. ์ปดํฌ๋„ŒํŠธ ๋ฉ”๋ชจ์ด์ œ์ด์…˜
      1. React.memo: ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜์—ฌ props๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ํ•œ ์žฌ๋ Œ๋”๋ง ๋ฐฉ์ง€
      2. PureComponent: ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, props์™€ state๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ํ•œ ์žฌ๋ Œ๋”๋ง ๋ฐฉ์ง€
    2. useMemo ๋ฐ useCallback ํ›…
      1. useMemo: ๊ณ„์‚ฐ ๋น„์šฉ์ด ํฐ ๊ฐ’์„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜์—ฌ ์˜์กด์„ฑ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ์žฌ๊ณ„์‚ฐ
      2. useCallback: ํ•จ์ˆ˜๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜์—ฌ ์˜์กด์„ฑ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ํ•œ ๋™์ผํ•œ ํ•จ์ˆ˜ ๋ฐ˜ํ™˜(์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ๋ฐฉ์ง€)
    3. ๋ Œ๋”๋ง ์ตœ์ ํ™”
      1. ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง: ํ•„์š”ํ•  ๋•Œ๋งŒ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๋„๋ก ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์„ ์‚ฌ์šฉ(์˜ˆ: {isVisible && <ChildComponent />})
      2. ๋ฆฌ์ŠคํŠธ ํ‚ค ์ตœ์ ํ™”: ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ Œ๋”๋งํ•  ๋•Œ ๊ณ ์œ ํ•œ ํ‚ค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ฆฌ์•กํŠธ๊ฐ€ ์–ด๋–ค ํ•ญ๋ชฉ์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์‰ฝ๊ฒŒ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
    4. ์ƒํƒœ ๊ด€๋ฆฌ ์ตœ์ ํ™”
      1. ์ƒํƒœ ๋ถ„๋ฆฌ: ์ƒํƒœ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ์ƒํƒœ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ Œ๋”๋ง
      2. ์ƒํƒœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ: ๊ณตํ†ต๋œ ์ƒํƒœ๋ฅผ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ ๋Œ์–ด์˜ฌ๋ ค ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋„๋ก ํ•จ
    5. Lazy Loading ๋ฐ Code Splitting
      1. React.lazy์™€ Suspense: ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•„์š”ํ•  ๋•Œ๋งŒ ๋กœ๋“œํ•˜์—ฌ ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ์ค„์ž„
      2. Dynamic Import: ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์„ ํ†ตํ•ด ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋งŒ ๋กœ๋“œํ•˜์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ
    6. ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ๋ฐฉ์ง€
      1. shouldComponentUpdate: ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์กฐ๊ฑด์—์„œ๋งŒ ๋ Œ๋”๋งํ•˜๋„๋ก ์ œ์–ด
      2. React Profiler: ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•˜๊ณ , ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ Œ๋”๋ง๋˜๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅ
    7. ์ตœ์ ํ™”๋œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง
      1. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์ตœ์ ํ™”: ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€
    8. CSS ๋ฐ ์ด๋ฏธ์ง€ ์ตœ์ ํ™”
      1. CSS ์ตœ์ ํ™”: CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ CSS ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํƒ€์ผ์„ ์ตœ์ ํ™”
      2. ์ด๋ฏธ์ง€ ์ตœ์ ํ™”: ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ , ํ•„์š”ํ•  ๋•Œ๋งŒ ๋กœ๋“œํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ

    5. React.memo, useMemo, useCallback ์–ธ์ œ ์จ์•ผ ํ• ๊นŒ?

    1. React.memo

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

    2. useMemo

    • ์šฉ๋„: ๊ณ„์‚ฐ ๋น„์šฉ์ด ํฐ ๊ฐ’์„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์žฌ๊ณ„์‚ฐ์„ ๋ฐฉ์ง€
    • ์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜:
      • ๋ณต์žกํ•œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜๊ณ  ์‹ถ์„ ๋•Œ.
      • ๋ Œ๋”๋ง ์ค‘์— ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ๊ฐ’์ด ์žˆ๊ณ , ๊ทธ ๊ฐ’์ด ํŠน์ • ์˜์กด์„ฑ ๋ฐฐ์—ด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ๋‹ค์‹œ ๊ณ„์‚ฐ๋˜๋„๋ก ํ•˜๊ณ  ์‹ถ์„ ๋•Œ.
    • ์ฃผ์˜ํ•  ์ :
      • ๋ฉ”๋ชจ์ด์ œ์ด์…˜์ด ํ•ญ์ƒ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์€ ์•„๋‹˜
      • ๊ฐ„๋‹จํ•œ ๊ณ„์‚ฐ์˜ ๊ฒฝ์šฐ, ๋ฉ”๋ชจ์ด์ œ์ด์…˜์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋” ํด ์ˆ˜ ์žˆ์Œ
      • ์˜์กด์„ฑ ๋ฐฐ์—ด์„ ์ž˜ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฉฐ, ๋ˆ„๋ฝ๋œ ์˜์กด์„ฑ์œผ๋กœ ์ธํ•ด stale closure ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

    3. useCallback

    • ์šฉ๋„: ํ•จ์ˆ˜๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ํ•จ์ˆ˜ ์žฌ์ƒ์„ฑ์„ ๋ฐฉ์ง€
    • ์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜:
      • ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— props๋กœ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ๋•Œ, ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์ž์ฃผ ์žฌ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ.
      • ํŠน์ • ์˜์กด์„ฑ ๋ฐฐ์—ด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ํ•จ์ˆ˜๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์‹ถ์„ ๋•Œ.
    • ์ฃผ์˜ํ•  ์ :
      • useCallback์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ ํ•ญ์ƒ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹˜
      • ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ, ๋ฉ”๋ชจ์ด์ œ์ด์…˜์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋” ํด ์ˆ˜ ์žˆ์Œ
      • ์˜์กด์„ฑ ๋ฐฐ์—ด์„ ์ž˜ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฉฐ, ๋ˆ„๋ฝ๋œ ์˜์กด์„ฑ์œผ๋กœ ์ธํ•ด stale closure ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

    ์š”์•ฝ

    • React.memo: ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์ตœ์ ํ™”. props๊ฐ€ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ.
    • useMemo: ๊ณ„์‚ฐ๋œ ๊ฐ’์˜ ๋ฉ”๋ชจ์ด์ œ์ด์…˜. ๋ณต์žกํ•œ ๊ณ„์‚ฐ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ.
    • useCallback: ํ•จ์ˆ˜์˜ ๋ฉ”๋ชจ์ด์ œ์ด์…˜. ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉ.