Community

useMemo์™€ useCallback์˜ ์ดํ•ด

[๐Ÿค” useMemo์™€ useCallback์€ ์™œ ๋‚˜ํƒ€๋‚œ๊ฑธ๊นŒ?] ๋ฆฌ์•กํŠธ๋Š” ๋งค ๋ Œ๋”๋ง๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ƒํƒœ ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ์Šค๋ƒ…์ƒท์„ ๋‚จ๊น๋‹ˆ๋‹ค. ์ด๋ฅผ ๊ฐ€์ƒ ๋”์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ๊ฐ€์ƒ ๋”์€ ๋”๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ฒผ์ง€๋งŒ ์‹ค์€ JS ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ๋Š” ๋žœ๋”๋ง๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฐ€์ƒ ๋”์„ ์ƒ์„ฑํ•˜๊ณ  ๊ธฐ์กด ์Šค๋ƒ…์ƒท๊ณผ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ์ ์„ ์ฐพ์•„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์ด๋ ‡๊ธฐ์— ๋ฆฌ์•กํŠธ๋Š” ์ด๋ฏธ ๋น ๋ฅธ ๋ Œ๋”๋ง์„ ํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์ง€๋งŒ, ๋•Œ๋•Œ๋กœ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋•Œ useMemo, useCallback์„ ํ†ตํ•ด์„œ ๋‘๊ฐ€์ง€ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1. ๋ Œ๋”๋ง ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2.๋ Œ๋”๋ง ์ค‘ ์ผ์–ด๋‚˜์•ผ ํ•˜๋Š” ์ž‘์—…์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ฆฌํ•˜์ž๋ฉด, ์ด ๋‘ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋‚ด๊ฐ€ ์ •๋ง ์—…๋ฐ์ดํŠธ ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ๋“ค๋งŒ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1๏ธโƒฃ ๊ฐ’์„ ๊ธฐ์–ตํ•˜๋Š” useMemo ๐Ÿ”– useMemo๋Š” ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ๋ฅด๋Š” ์‹œ๊ฐ„์„ ๋ณด์—ฌ์ฃผ๋Š” ์‹œ๊ณ„์™€ ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›์•„ 1์—์„œ ์ž…๋ ฅ๊ฐ’๊นŒ์ง€ ๋ณด์—ฌ์ฃผ๋Š” ํ‘œ๊ฐ€ ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ์‹œ๋‹ค. ์‹œ๊ณ„๋Š” 1์ดˆ๋งˆ๋‹ค ๋ Œ๋”๋ง ํ•˜๊ณ  ์ˆซ์žํ‘œ๋„ ๊ทธ ๋•Œ๋งˆ๋‹ค ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค. ์ด ์ˆซ์ž๊ฐ€ 100์ผ ๋•Œ๋Š” ๋ฌธ์ œ ์—†์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋งŒ์•ฝ 1000์–ต์œผ๋กœ ์ž…๋ ฅ๊ฐ’์ด ๋“ค์–ด์˜จ๋‹ค๋ฉด 1์ดˆ๋งˆ๋‹ค 1000์–ต๊นŒ์ง€ ๋ Œ๋”๋ง์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ useMemo๋ฅผ ํ†ตํ•ด ๋ Œ๋”๋ง์„ ๋œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. useMemo๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ์ˆซ์žํ‘œ์— ๋“ค์–ด๊ฐˆ ์ˆซ์ž๋“ค์˜ ๋ฐฐ์—ด์„ ์ƒˆ๋กœ ๋งŒ๋“ ๋‹ค๋ฉด ๋ Œ๋”๋ง ๋ถ€๋‹ด์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ’กTip. useMemo๋ฅผ ์“ฐ์ง€ ์•Š๊ณ ๋„ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋‚ด๋Š” ๋ฒ• ์•„๊นŒ ์‹œ๊ณ„์™€ ํ‘œ๊ฐ€ ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ์— ์žˆ๋‹ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋‘ ๊ฐœ๋กœ ์ชผ๊ฐœ์–ด ๊ฐ™์€ ๋ถ€๋ชจ๋ฅผ ๊ฐ€์ง„ ํ˜•์ œ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค์–ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋ Œ๋”๋ง์œผ๋กœ ์ธํ•œ ๋ณ€๊ฒฝ์€ ์œ„์—์„œ ์•„๋ž˜๋กœ๋งŒ ์ž‘์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 2๏ธโƒฃ ํ•จ์ˆ˜๋ฅผ ๊ธฐ์–ตํ•˜๋Š” useCallback ๐Ÿ”– useCallback์€ useMemo์˜ ๋ฌธ๋ฒ•์  ์„คํƒ•์ž…๋‹ˆ๋‹ค. useMemo๋Š” ๋ฐ˜ํ™˜๊ฐ’์„ ํ•จ์ˆ˜๋กœ ๊ฐ์‹ธ์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„ฃ์Šต๋‹ˆ๋‹ค. useMemo๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋ ค๊ณ  ํ•˜๋ฉด ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋‹ˆ useCallback์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์ค€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. [๐Ÿคทโ€โ™€๏ธ๋ฐฐ์—ด, ๊ฐ์ฒด, ํ•จ์ˆ˜๋ฅผ prop์œผ๋กœ ๋‚ด๋ ค์ฃผ๋Š”๋ฐ ๋ณ€ํ•œ ๊ฒŒ ์—†์–ด๋„ ์ž๊พธ ๋ฆฌ๋ Œ๋”๋ง ๋ผ์š”] ๋ฆฌ๋ Œ๋”๋ง ์‹œ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์€ ์ด์ „๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค(๊ฐ’์ด ๊ฐ™๋”๋ผ๋„). ๊ฐ์ฒด์™€ ๋ฐฐ์—ด์„ ๋น„๊ตํ•  ๋•Œ ๋‚ด๋ถ€ ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐ๊ฐ’์œผ๋กœ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ useCallback์ด๋‚˜ useMemo์—†์ด ์ด ๋‚ด๋ถ€ ๊ฐ’์„ ํ•˜์œ„ prop์œผ๋กœ ๋„˜๊ธฐ๋Š” ๊ฒฝ์šฐ React.memo๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. prop์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฐ’์— ์ด ํ›…์„ ์ ์ ˆํ•˜๊ฒŒ ํ™œ์šฉํ•˜๋ฉด ๋ฆฌ๋ Œ๋”๋ง ํšŸ์ˆ˜์˜ ๊ฐ์†Œ ํšจ๊ณผ๋ฅผ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. [๐Ÿ™‹โ€โ™€๏ธ์ปดํฌ๋„ŒํŠธ์˜ ๋ฆฌ๋ Œ๋”๋ง ์ตœ์ ํ™” ๋ง๊ณ ๋„ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์˜ˆ๊ฐ€ ์žˆ์„๊นŒ์š”?] 1. ์ž์ฃผ ์“ฐ๋Š” ์ปค์Šคํ…€ ํ›…์—์„œ ๋‚ด๋ถ€ ํ•จ์ˆ˜๋ฅผ useCallback์œผ๋กœ ๊ฐ์‹ธ๋ณด์„ธ์š”. 2. context provider์—์„œ value๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด useMemo ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•ด๋ณด์„ธ์š”

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค