Skip to content

Latest commit

ย 

History

History
129 lines (82 loc) ยท 4.06 KB

11-useCallback.md

File metadata and controls

129 lines (82 loc) ยท 4.06 KB

useCallback๐Ÿ™„

โ“ ์ด๊ฒŒ ๋ญ์—์š”?

memoized function์„ ๋ฐ˜ํ™˜ ํ•ด์ฃผ๋Š” hook์ด์—์š”!

๊ฐ’์ด ์•„๋‹Œ function์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š”๊ฑฐ์—์š”!

โ“ ๋„ค? ์ดํ•ด๊ฐ€ ์•ˆ๋ผ์š”...

ํ•œ๋ฒˆ decalre( ์ด ํ•˜ '์„ ์–ธ' ) ๋˜์—ˆ๋˜ ํ•จ์ˆ˜๋ฅผ ์žฌ์ฐจ declare ์•ˆํ•ด๋„ ๋œ๋‹ค๋Š” ๊ฑฐ์—์š”. ^^

memoized!!

โ“ ์•„! ๊ทธ๋Ÿผ useCallback์œผ๋กœ ๊ฐ์‹ธ์ง„ ํ•จ์ˆ˜๋Š” ์˜์›ํžˆ ์„ ์–ธ ์•ˆํ•ด์ฃผ๋‚˜์š”?

์•„๋‹™๋‹ˆ๋‹ค!
dependency์— ๋„ฃ์–ด์ค€ ๊ฐ’์ด ๋ณ€๊ฒฝ์„ ํ•  ์‹œ์—, ์žฌ์ฐจ ์„ ์–ธ์„ ํ•ด์ค˜์š”!!

โ“ dependecy์— ์žˆ๋Š” ๊ฐ’์ด ๋ณ€๊ฒฝ์€ ์–ด๋–ป๊ฒŒ ์•Œ์•„์š”?

**์ฐธ์กฐ ํ†ต์ผ์„ฑ(Referencial equality)**์„ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด, ๊ฐ’์˜ ๋ณ€๊ฒฝ์ด ์–ธ์ œ ์ผ์–ด๋‚˜๋Š”์ง€ ํ™•์ธ ํ•˜ ์‹ค ์ˆ˜ ์žˆ์–ด์š”!

/* Primitive Values */
true === true // true
false === false // true
1 === 1 // true
'a' === 'a' // true

/* Reference Values */
{} === {} // false
[] === [] // false
() => {} === () => {} // false


const z = {}
z === z // true

โ“ ์™€! ๊ทธ๋Ÿผ ์ปดํฌ๋„ŒํŠธ์— ์„ ์–ธ๋˜๋Š” ํ•จ์ˆ˜๋“ค์„ ๋งค๋ฒˆ useCallback์œผ๋กœ ๊ฐ์‹ธ์ค˜์•ผ๊ฒ ๋„ค์š”!

์•„๋‹™๋‹ˆ๋‹ค!!

๊ฐ€๋ฒผ์šด ํ•จ์ˆ˜๋“ค์€ ์ ์šฉ์„ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.

์ตœ์ ํ™”๋ฅผ ํ• ๋ ค๋‹ค, ์ตœ์ ํ™”๊ฐ€ ๋˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ธฐ ๋–„๋ฌธ์ž…๋‹ˆ๋‹ค.

โ“ ์˜ˆ? ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ์ธ๋ฐ, ๋˜๋ ค ์ตœ์ ํ™”๊ฐ€ ์•ˆ๋œ๋‹ค๋Š”๊ฒŒ ๋ฌด์Šจ ๐Ÿถ์†Œ๋ฆฌ์—์š”?

์ตœ์ ํ™”๋ผ๋Š”๊ฑด ๊ฒฐ๊ตญ trade-off(๋“ฑ๊ฐ€๊ตํ™˜)์—์š”.

Every line of code which is executed comes with a cost.

๋Œ€๊ฐ€ ์—†๋Š” ์ฝ”๋“œ๋Š” ์—†์–ด์š”!

// #1
const hello = () => {}


// #2
const hello = useCallback(() => {}, [])

์ฒซ๋ฒˆ ์จฐ ์ฝ”๋“œ์™€ ๋‘๋ฒˆ ์งธ ์ฝ”๋“œ๋ฅผ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•˜๋ฉด ์–ด๋–ค๊ฒŒ ๋” ์ข‹์„๊นŒ์š”?

โ“ 2 ..2 ... 2๋ฒˆ์ด์š”! useCallback ํ•จ์ˆ˜๋กœ ์ตœ์ ํ™”๋ฅผ ํ–ˆ์ž–์•„์š”!!

1๋ฒˆ ์ž…๋‹ˆ๋‹ค. ๐Ÿคฆโ€โ™‚๏ธ

์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋„๋ก, 2๋ฒˆ์„ ํ’€์–ด๋ณด๋ฉด

// refactored #2
const hello = () => {}

const helloCallback = useCallback(hello, []);

hello๋„ ์„ ์–ธ ํ•ด์ค˜์•ผ ๋˜๋ฉด์„œ, ๐Ÿคฆโ€โ™‚๏ธ
useCallback ํ•จ์ˆ˜์˜ property ์„ธํŒ…๊ณผ ์•ˆ์— ๊ธฐํƒ€ ๋กœ์ง๋„ ๋Œ์•„๊ฐ€๊ณ ... ๐Ÿคฆโ€โ™‚๏ธ
dependency๋ฅผ ์žก์•„์ฃผ๋Š” [] ๋ฐฐ์—ด์•ˆ์—๋„ ๋ฌด์—‡์ด ๋“ค์–ด๊ฐ€์žˆ๋Š”์ง€๋„ ํ™•์ธํ•ด์•ผ ๋˜๋„ค์š”....๐Ÿคฆโ€โ™‚๏ธ

โ“ ๊ทธ๋Ÿฌ๋„ค์š”. ์ตœ์ ํ™”๋ฅผ ํ• ๋ ค, ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๋˜๋ ค, ์ผ์ด ๋” ์ถ”๊ฐ€ ๋ฌ๋„ค์š”...

(TMI)

๋”๊ตฐ๋‹ค๋‚˜, 1๋ฒˆ ์ฝ”๋“œ์˜ hello ํ•จ์ˆ˜๋Š” garbage collected๊ฐ€ ๋˜๋Š” ๋ฐ˜๋ฉด!

2๋ฒˆ ์ฝ”๋“œ์•ˆ์— hello ํ•จ์ˆ˜๋Š” garbage collected๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โ€ป garbage collected๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•˜์‹œ๋ฉด ํ•˜๋‹จ ์ถœ์ฒ˜๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

โ“ ใ…Žใ…Ž... ๐Ÿคช๐Ÿคช๐Ÿคช๐Ÿคช

๋‹ค์‹œ ์›์ ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ,

"์ปดํฌ๋„ŒํŠธ์— ์„ ์–ธ๋˜๋Š” ํ•จ์ˆ˜๋“ค์„ ๋งค๋ฒˆ useCallback์œผ๋กœ ๊ฐ์‹ธ์ค˜์•ผ๊ฒ ๋„ค์š”!"

NO NO NO

๊ฐ„๋‹จํ•œ ์ž‘์—…์กฐ์ฐจ ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด,
๋ฉ”๋ชจ๋ฆฌ์— ๋” ๋ฌด๋ฆฌ๋ฅผ ์ฃผ๋Š” ํ–‰๋™์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

"๊ณผ์œ ๋ถˆ๊ธ‰"

๋ฌผ๋ก ,
๋ธŒ๋ผ์šฐ์ €๋Š” ๋˜‘๋˜‘ํ•˜๊ณ ,
๋ฆฌ์•กํŠธ๋„ ๋˜‘๋˜‘ํ•˜๊ธฐ์—,
์œ„์— ์–ธ๊ธ‰ํ•œ ์‚ฌ์†Œํ•œ ์ผ€์ด์Šค๋Š” ๋ณ„ ๋‹ค๋ฅธ impact๋ฅผ ์ฃผ์ง€ ์•Š์•„์š”.

โ“ ์˜ค.... ๊ทธ๋ž˜์„œ useCallback์„ ์–ธ์ œ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋‚˜์š”? (์ ์  ๋” ๋ฏธ๊ถ์œผ๋กœ...)

ํฌ๊ฒŒ, ๋‘๊ฐœ์˜ ์ค‘์ ์œผ๋กœ ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  1. ์ฐธ์กฐ ํ†ต์ผ์„ฑ์„ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  2. ๊ณ„์‚ฐ ๋น„์šฉ์ด ๋น„์‹ผ ๋“œ๋Š” ํ˜น์€ ๋ณต์žกํ•œ ๋กœ์ง์ด ์žˆ์„ ๋•Œ

โ“ ์™€!! ๊ทธ๋Ÿผ ์ด์ œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋งŒ ์•Œ๋ฉด ๋˜๊ฒ ์–ด์š”. ๐Ÿค—

์˜ค๋Š˜ ์ค€๋น„ํ•œ ์ฝ”๋“œ๋ถ€ํ„ฐ ๋ณด์‹œ์ฃ .

์ƒŒ๋“œ๋ฐ•์Šค ๋งํฌ

(๋ผ์ด๋ธŒ ์ฝ”๋”ฉ ์„ค๋ช… ์ง„ํ–‰)

See Also: