ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

web/react

memo

dev_been94 2024. 12. 16. 11:47
728x90
๋ฐ˜์‘ํ˜•

memo

 

๐ŸŽฏ memo๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

**memo**๋Š” React์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๋„๋ก ๋ฉ”๋ชจ(๊ธฐ์–ต)ํ•ด ๋‘๋Š” ๊ธฐ๋Šฅ์ด์—์š”.
์‰ฝ๊ฒŒ ๋งํ•ด์„œ, ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•ด์„œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ผ์š”.

 

๐Ÿ• ๋น„์œ ๋กœ ์ดํ•ดํ•˜๊ธฐ: ํ”ผ์ž ๋ฐฐ๋‹ฌ์› ์ด์•ผ๊ธฐ

์—ฌ๋Ÿฌ๋ถ„์ด ํ”ผ์ž ๋ฐฐ๋‹ฌ์›์ด๋ผ๊ณ  ์ƒ์ƒํ•ด ๋ณด์„ธ์š”. ๐Ÿ•

  1. ๊ธฐ๋ณธ React ์ปดํฌ๋„ŒํŠธ (๋ฉ”๋ชจ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ)
    • ๋งค์ผ ๊ฐ™์€ ์•„ํŒŒํŠธ์— ํ”ผ์ž๋ฅผ ๋ฐฐ๋‹ฌํ•˜๋Š”๋ฐ, ๊ทธ ์ง‘์— ์–ด๋–ค ํ”ผ์ž๋ฅผ ์ฃผ๋ฌธํ–ˆ๋Š”์ง€ ๋งค๋ฒˆ ๋ฌผ์–ด๋ณธ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”.
    • "์–ด๋–ค ํ”ผ์ž ์ฃผ๋ฌธํ•˜์…จ์ฃ ?" → "๋งˆ๋ฅด๊ฒŒ๋ฆฌํƒ€์š”!"
    • ๋น„ํšจ์œจ์ ์ด์ฃ ? ๋˜‘๊ฐ™์€ ๊ฑธ ๋ฌผ์–ด๋ณด๊ณ  ์ผ์„ ๋” ๋งŽ์ด ํ•˜๋Š” ์…ˆ์ด์—์š”.
  2. React.memo (๋ฉ”๋ชจ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ)
    • "์ง€๋‚œ๋ฒˆ์—๋„ ๋งˆ๋ฅด๊ฒŒ๋ฆฌํƒ€ ํ”ผ์ž๋ฅผ ์ฃผ๋ฌธํ–ˆ์œผ๋‹ˆ๊นŒ ์ด๋ฒˆ์—๋„ ๋˜‘๊ฐ™์„ ๊ฑฐ์•ผ"๋ผ๊ณ  **๊ธฐ์–ต(๋ฉ”๋ชจ)**ํ•ด ๋‘๋ฉด ๋ฉ๋‹ˆ๋‹ค.
    • ์ฃผ๋ฌธ์ด ๋‹ฌ๋ผ์ง€์ง€ ์•Š์•˜๋‹ค๋ฉด ๋‹ค์‹œ ๋ฌผ์–ด๋ณผ ํ•„์š”๊ฐ€ ์—†์–ด์š”!

React์˜ **memo**๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์˜ˆ์š”.
์ปดํฌ๋„ŒํŠธ์˜ props(์ฃผ๋ฌธ)๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š์•˜๋‹ค๋ฉด, ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๊ณ  ์ด์ „ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์–ตํ•ด๋‘ก๋‹ˆ๋‹ค.

 

๐Ÿ› ๏ธ React.memo ์‚ฌ์šฉ๋ฒ•

memo๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‹ค์‹œ ๋ Œ๋”๋ง๋˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์ค๋‹ˆ๋‹ค.
ํ•œ๋ฒˆ ์˜ˆ์ œ๋ฅผ ๋ณผ๊ฒŒ์š”!

 

1. ๊ธฐ๋ณธ ์˜ˆ์ œ

๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ

import React from 'react';

function MyComponent({ name }) {
  console.log('MyComponent ๋ Œ๋”๋ง'); // ๋ Œ๋”๋ง ํ™•์ธ์šฉ
  return <p>์•ˆ๋…•ํ•˜์„ธ์š”, {name}๋‹˜!</p>;
}

export default MyComponent;

 

๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ

import React, { useState } from 'react';
import MyComponent from './MyComponent';

function ParentComponent() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <h1>์นด์šดํŠธ: {count}</h1>
      <button onClick={() => setCount(count + 1)}>์นด์šดํŠธ ์ฆ๊ฐ€</button>
      <MyComponent name="ํ™๊ธธ๋™" />
    </div>
  );
}

export default ParentComponent;

๐Ÿ” ์ด ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ 

  • ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด count๊ฐ€ ๋ฐ”๋€Œ๋ฉด์„œ **ParentComponent**๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.
  • **MyComponent**์˜ name์€ ๋ฐ”๋€Œ์ง€ ์•Š์•˜์ง€๋งŒ, ๋ถ€๋ชจ๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง๋˜๋ฉด์„œ MyComponent๋„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‹ค์‹œ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.

 

2. React.memo๋กœ ์ตœ์ ํ™”ํ•˜๊ธฐ

์ด์ œ React.memo๋ฅผ ์‚ฌ์šฉํ•ด์„œ MyComponent๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋„๋ก ๋ง‰์•„๋ด…์‹œ๋‹ค.

 

React.memo ์ ์šฉ

import React from 'react';

// React.memo๋ฅผ ์‚ฌ์šฉํ•ด์„œ MyComponent๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜
const MyComponent = React.memo(function MyComponent({ name }) {
  console.log('MyComponent ๋ Œ๋”๋ง'); // ๋ Œ๋”๋ง ํ™•์ธ์šฉ
  return <p>์•ˆ๋…•ํ•˜์„ธ์š”, {name}๋‹˜!</p>;
});

export default MyComponent;

3. ์ตœ์ ํ™”๋œ ๊ฒฐ๊ณผ

  • count๊ฐ€ ์ฆ๊ฐ€ํ•  ๋•Œ **ParentComponent**๋งŒ ๋‹ค์‹œ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.
  • MyComponent์˜ name์ด ๋ฐ”๋€Œ์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ MyComponent๋Š” ๋‹ค์‹œ ๋ Œ๋”๋ง๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ฝ˜์†”์— **MyComponent ๋ Œ๋”๋ง**์ด ๋” ์ด์ƒ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”. ๐ŸŽ‰

 

๐Ÿš€ React.memo์˜ ๋™์ž‘ ์›๋ฆฌ

React.memo๋Š” props๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • **"props๊ฐ€ ์ด์ „๊ณผ ๊ฐ™์€ ๊ฐ’์ธ์ง€ ํ™•์ธํ•˜๊ณ  ๊ฐ™์œผ๋ฉด ์žฌ์‚ฌ์šฉ"**ํ•˜๋Š” ์›๋ฆฌ์˜ˆ์š”.

 

๐ŸŒŸ React.memo๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์ƒํ™ฉ

  1. ํฐ ์ปดํฌ๋„ŒํŠธ
    • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํฌ๊ณ  ๋ณต์žกํ• ์ˆ˜๋ก ๋ Œ๋”๋ง ๋น„์šฉ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค.
    • memo๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์–ด์š”.
  2. ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” props
    • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋˜๋”๋ผ๋„ props ๊ฐ’์ด ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.
  3. ์ž์ฃผ ๋ Œ๋”๋ง๋˜๋Š” ์ปดํฌ๋„ŒํŠธ
    • ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ Œ๋”๋ง๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์— memo๋ฅผ ์ ์šฉํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โš ๏ธ ์ฃผ์˜ํ•  ์ 

  1. props๊ฐ€ ์ž์ฃผ ๋ฐ”๋€Œ๋ฉด memo์˜ ํšจ๊ณผ๊ฐ€ ์—†์–ด์š”.
    • React.memo๋Š” props๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋งŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.
  2. ๊ฐ์ฒด๋‚˜ ํ•จ์ˆ˜ props
    • ๊ฐ์ฒด๋‚˜ ํ•จ์ˆ˜๋ฅผ props๋กœ ์ „๋‹ฌํ•˜๋ฉด ์ฐธ์กฐ๊ฐ’์ด ๋งค๋ฒˆ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— memo๊ฐ€ ๋ Œ๋”๋ง์„ ๋ง‰์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์–ด์š”.
    • ์ด๋Ÿด ๋• useMemo๋‚˜ useCallback์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์•„์š”.

 

๐ŸŽ‰ ํ•œ ์ค„ ์š”์•ฝ

**React.memo**๋Š” ์ปดํฌ๋„ŒํŠธ์˜ props๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š์œผ๋ฉด ๋ Œ๋”๋ง์„ ๊ฑด๋„ˆ๋›ฐ์–ด์„œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด์—์š”.

 

 

๐Ÿ˜Š ๋งˆ๋ฌด๋ฆฌ

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

728x90
๋ฐ˜์‘ํ˜•

'web > react' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

use  (0) 2024.12.16
startTransition  (0) 2024.12.16
lazy  (0) 2024.12.16
forwardRef  (0) 2024.12.16
createContext  (0) 2024.12.16
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/06   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•
250x250