[React Hooks] - useMemo

yiwoojungยท2022๋…„ 7์›” 18์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
6/9
post-custom-banner

๋ณ„์ฝ”๋”ฉ-React Hooks์— ์ทจํ•œ๋‹ค - useMemo ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ | ๋ฆฌ์•กํŠธ ํ›…์Šค ์‹œ๋ฆฌ์ฆˆ ๋ฅผ ๋ณด๋ฉฐ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.


1. useMemo

useMemo์—์„œ Memo๋ผ๋Š” ๋ง์€ Memoization์„ ๋œปํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์ด๋ž€ ๋™์ผํ•œ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋งจ ์ฒ˜์Œ ๊ฐ’์„ ๊ณ„์‚ฐํ•  ๋•Œ ํ•ด๋‹น ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด์„œ ๋˜ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๊ณ  ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊บผ๋‚ด์„œ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•์„ ๋งํ•œ๋‹ค.
๋” ๊ฐ„๋‹จํžˆ ๋งํ•˜์ž๋ฉด ์ž์ฃผ ํ•„์š”ํ•œ ๊ฐ’์„ ๋งจ ์ฒ˜์Œ ๊ณ„์‚ฐ ํ•  ๋•Œ ์บ์‹ฑ์„ ํ•ด๋‘ฌ์„œ ๊ทธ ๊ฐ’์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์บ์‹œ์—์„œ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


์•„๋ž˜์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณด์ž.
function Component(){
	const value = calculate();
    return <div>{value}</div>
}

value ๋Š”calculate() ํ•จ์ˆ˜๋กœ ๋ถ€ํ„ฐ ๊ฐ’์„ ๋ฐ›์•„์˜จ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” state props์˜ ๋ณ€ํ™”๋กœ ์ธํ•ด ์ˆ˜๋งŽ์€ ๋ Œ๋”๋ง์„ ๊ฑฐ์นœ๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋ ๋•Œ๋งˆ๋‹ค value ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์— calculate() ํ•จ์ˆ˜๋Š” ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœ๋  ๊ฒƒ์ด๋‹ค. ์ด๋Š” ๋งŒ์•ฝ calculate() ํ•จ์ˆ˜๊ฐ€ ๋งค์šฐ ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ํ•˜๋Š” ํ•จ์ˆ˜๋ผ๋ฉด ๊ต‰์žฅํžˆ ๋น„ํšจ์œจ์ ์ผ ๊ฒƒ์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด ํ•จ์ˆ˜๋Š” ๋ฌด์˜๋ฏธํ•œ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•ด์„œ value ๋ผ๋Š” ๋ณ€์ˆ˜์— ๊ฐ™์€ ๊ฐ’์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ• ๋‹นํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋•Œ useMemo๋ฅผ ์‚ฌ์šฉํ•ด์„œ Memoization ์„ ํ•ด์ฃผ๋ฉด ์ด ์ƒํ™ฉ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

function Component(){
	const value = useMemo(
    	() => calculate()
      ,[]);
  
    return <div>{value}</div>
}

useMemo๋Š” ์ฒ˜์Œ์— ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ Œ๋”๋ง๋˜์–ด๋„ calculate๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์ด์ „์— ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊บผ๋‚ด์™€์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.


2. useMemo์˜ ๊ตฌ์กฐ

useMemo๋Š” ๋‘๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›๋Š”๋‹ค. ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜, ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ๋Š” ๋ฐฐ์—ด์„ ๋ฐ›๋Š”๋‹ค.

const value = useMemo(() => {
  return calculate();
}, [item]);

์ฒซ๋ฒˆ์งธ ์ธ์ž์ธ ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ํ•ด์ค„ ๊ฐ’์„ ๊ณ„์‚ฐํ•ด์„œ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์ด ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ๋ฆฌํ„ดํ•˜๋Š” ๊ฐ’์ด ๋ฐ”๋กœ useMemo๊ฐ€ ๋ฆฌํ„ดํ•˜๋Š” ๊ฐ’์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
๋‘๋ฒˆ์งธ ์ธ์ž์ธ ๋ฐฐ์—ด์€ ์˜์กด์„ฑ ๋ฐฐ์—ด ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค. useMemo๋Š” ๋ฐฐ์—ด์•ˆ์˜ ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋ ๋•Œ๋งŒ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•ด์„œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜๋œ ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•ด์„œ ๋‹ค์‹œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ•ด์ค€๋‹ค.
๋งŒ์•ฝ์— ๋นˆ๋ฐฐ์—ด []์„ ๋„˜๊ฒจ์ฃผ๋ฉด ๋งจ ์ฒ˜์Œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ ๋˜์—ˆ์„ ๋•Œ๋งŒ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ณ  ์ดํ›„์—๋Š” ํ•ญ์ƒ ๋ฉ”๋ชจ์ด์ œ์ด์…˜๋œ ๊ฐ’์„ ๊บผ๋‚ด์™€์„œ ์‚ฌ์šฉํ•œ๋‹ค.


3. useMemo, ๊ผญ ํ•„์š”ํ• ๋•Œ๋งŒ!

์ด๋ ‡๊ฒŒ ์ข‹์€ useMemo๋„ ๋‚จ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. useMemo๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฑด ๊ฐ’์„ ์žฌํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋”ฐ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ๋ชจํ•ด์„œ ๊ฐ’์„ ์ €์žฅํ•ด ๋‘”๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ ์ด๋Š” ๋ถˆํ•„์š”ํ•œ ๊ฐ’๋“ค๊นŒ์ง€ ๋ชจ๋‘ ๋ฉ”๋ชจ์•„์ด์ฆˆ ํ•ด๋ฒ„๋ฆฌ๋ฉด ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ์•…ํ™”๋  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— useMemo๋Š” ํ•„์š”ํ•  ๋•Œ๋งŒ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.


4. useMemo ์‚ฌ์šฉํ•˜๊ธฐ

๊ฐ์ฒด ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์— ๋ณด๊ด€์ด ๋˜๊ณ  ๋ณ€์ˆ˜์—๋Š” ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ€ ๋ณด๊ด€๋œ๋‹ค. ๋˜‘๊ฐ™์•„ ๋ณด์ด๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋น„๊ตํ•ด๋ณด๋ฉด ์•ˆ์— ๋‚ด์šฉ์ด ๊ฐ™์•„๋„ ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ useEffect๋ฅผ ์›์‹œํƒ€์ž…์ด ์•„๋‹Œ ๊ฐ์ฒดํƒ€์ž…๊ณผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ด๋Ÿฐ eslint ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋” ๋˜๋ฉด ๋˜‘๊ฐ™์•„ ๋ณด์ด๋Š” location ๊ฐ์ฒด์—ฌ๋„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ฃผ์†Œ๊ฐ€ ๋ฐ”๊ผˆ๊ธฐ ๋•Œ๋ฌธ์— location์— ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ๋‹ค์‹œ ํ• ๋‹น๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‹ค๋ฅธ state๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฆฌ๋ Œ๋” ๋˜๊ธฐ ๋•Œ๋ฌธ์— useEffect์™€ ๊ฐ์ฒดํƒ€์ž…์„ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€์•Š๋‹ค.


์‹ค์ œ๋กœ eslint์—์„œ๋„ location์„ useMemo() Hook์œผ๋กœ ๊ฐ์‹ธ๋ผ๋Š” ๋ง์„ ํ•ด์ค€๋‹ค.

์ด์ œ ์ด ๋ฌธ์ œ๋ฅผ useMemo๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐํ•ด๋ณด์ž.

์ด๋ ‡๊ฒŒ useMemo๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํšจ๊ณผ์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ตœ์ ํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. useEffect์—์„œ ๋ญ”๊ฐ€ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ํ•ด์•ผํ•œ๋‹ค๋ฉด ๊ผญ ํ•„์š”ํ• ๋•Œ๋งŒ ํ˜ธ์ถœ ๋˜๋Š”๊ฒƒ์ด ์ข‹๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

profile
์˜๊ฒฌ์ด ์žˆ์œผ์‹œ๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๋‚ด์šฉ์„ ๋ฐœ๊ฒฌํ•˜์…จ๋‹ค๋ฉด ์žฌ๋นจ๋ฆฌ ๋Œ“๊ธ€ ์ฃผ์„ธ์š” ๏ฝกโ€ขโ—กโ€ข๏ฝก
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€