[React] React.memo, useMemo, useCallback
728x90

Today, What I learned?

ํ”„๋ก ํŠธ์—์„œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ธ๊ฐ€?๋ฅผ ์š”์ƒˆ ๊ณ ๋ฏผํ•˜๊ณ  ์ฐพ์•„๋ณด๊ณ , ์—ฌ๋Ÿฌ ๊ธ€๋“ค์„ ์ฝ์–ด๋ณด๊ณ  ์žˆ๋‹ค.

๊ทธ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ธ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ์ค„์ด๊ธฐ!..

๋ Œ๋”๋ง์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ธ memoization์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด ๋ณธ๋‹ค.

 

 

memoization

memoization์€ ๋ฆฌ์•กํŠธ์—๋งŒ ํ•ด๋‹น๋˜๋Š” ๊ธฐ์ˆ ์€ ์•„๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ๊ฐ€ ๋™์ผํ•œ ๊ณ„์‚ฐ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ•  ๋•Œ,

์ด์ „์˜ ๊ณ„์‚ฐํ•œ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด ๋†“๊ณ  ์‚ฌ์šฉํ•˜์—ฌ ์†๋„๋ฅผ ๋†’์ด๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋ฐ˜๋ณต ์ž‘์—… ํ•ด์•ผ ํ•  ๋ถ€๋ถ„์„ ๋ฉ”๋ชจ๋ฅผ ํ•ด๋†“๊ณ  ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๋Š๋‚Œ?

๋ณดํ†ต ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด์„œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

 

๋ฆฌ์•กํŠธ์—์„œ์˜ memoization ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€.

React.memo, useMemo, useCallback ์ด๋ ‡๊ฒŒ ์žˆ๋‹ค.

์ฐจ๋ก€๋Œ€๋กœ ์•Œ์•„๋ณด๊ธฐ ์ „์— ๋จผ์ € ์–ด๋–จ ๋•Œ ๋ฆฌ๋ Œ๋”๋ง์ด ๋˜๋Š”์ง€๋ฅผ ๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

๋ฆฌ๋ Œ๋”๋ง ์กฐ๊ฑด

๋ฆฌ์•กํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋˜๋Š” ์กฐ๊ฑด์€ ์ด๋ ‡๋‹ค.

  1. ์ปดํฌ๋„ŒํŠธ์—์„œ state๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ
  2. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‚ด๋ ค๋ฐ›์€ props๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ
  3. ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋œ ๊ฒฝ์šฐ

 

React.memo

React.memo๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ์‹ธ์„œ ์‚ฌ์šฉํ•˜๊ณ , ์ปดํฌ๋„ŒํŠธ๋ฅผ ์บ์‹ฑํ•˜๋Š” ํ•จ์ˆ˜๋‹ค.

๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋  ๋•Œ, ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ง‰๋Š”๋‹ค.

 

์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋‹ค.
์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, export ํ•  ๋•Œ ๊ฐ์‹ธ์ฃผ์–ด ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜.

const Result = React.memo(() => {
  return ()
})
export default React.memo(Box1);

 

 

useMemo

useMemo๋Š” ๊ฐ’์„ ์บ์‹ฑํ•œ๋‹ค.

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

์˜์กด์„ฑ ๋ฐฐ์—ด์˜ ๊ฐ’์ด ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฒฐ๊ด๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

const value = useMemo(()=>{  
    return ๋ฐ˜ํ™˜ํ•  ํ•จ์ˆ˜
}, [depenedencyArray];

 

 

๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์„ ๊ฒฝ์šฐ์— ๋งค๋ฒˆ ํ•จ์ˆ˜๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง ๋˜์–ด ๊ฐ’์„ ๋ฐ›์•„์˜ฌ ํ•„์š”๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

useMemo(()=> heavywork(),[]);

 

 

 

useCallback

useCallback์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋  ๋•Œ ํ•จ์ˆ˜์˜ ์žฌ์ƒ์„ฑ์„ ๋ง‰์•„์ค€๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•จ์ˆ˜ ์—ญ์‹œ ๊ฐ์ฒด์˜ ํ•œ ์ข…๋ฅ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐ ํƒ€์ž…์ด๋‹ค.

์ฆ‰ ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ์ฐธ์กฐ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜๊ณ , ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์ธ์‹๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋ฆฌ๋ Œ๋”๋ง ๋  ๊ฒฝ์šฐ ํ•จ์ˆ˜ ๋‚ด์šฉ ์ž์ฒด๋Š” ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ๋ฉ”๋ชจํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

const initCount = useCallback(()=>{
    // ํ•จ์ˆ˜ ๋‚ด์šฉ
}, []); 

// ์—ฌ๊ธฐ์„œ์˜ [] => ์˜์กด์„ฑ ๋ฐฐ์—ด

 

 

 

ํ•˜์ง€๋งŒ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์— ๋ฉ”๋ชจ๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง„ ์•Š๋‹ค.

๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์— ๋ฉ”๋ชจ๋ฅผ ์ ์šฉํ•œ๋‹ค๋ฉด ์บ์‹œ๊ฐ€ ๋„ˆ๋ฌด ์ปค์งˆ ์ˆ˜ ์žˆ๊ณ , props ๋ณ€๊ฒฝ์ด ๋งŽ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์บ์‹ฑ์„ ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ!...

์ด์ œ ์ฐจ์ฃผ๋ถ€ํ„ฐ ์ตœ์ ํ™”๋ฅผ ํ•ด๋‚˜ ๊ฐˆ ํ…๋ฐ ๊ทธ๋•Œ memoization์„ ์–ด๋–ค ์‹์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ๋‚จ๊ฒจ๋ด์•ผ๊ฒ ๋‹ค.

728x90