๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป๋ชจ๋˜ ๋ฆฌ์•กํŠธ Deep Dive

pjw__98ยท2023๋…„ 12์›” 7์ผ
1
post-thumbnail

๐Ÿ“† ๋‚ ์งœ

2023/12/07(๋ชฉ)

๐Ÿ“š ์ฑ•ํ„ฐ

๋ฆฌ์•กํŠธ์—์„œ์˜ ๋™๋“ฑ ๋น„๊ต


๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ํ•™์Šต ๋‚ด์šฉ

๐ŸŽฏ ๋ฆฌ์•กํŠธ์—์„œ์˜ ๋น„๊ต

Object.is๋กœ ๋จผ์ € ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ ->
๊ฐ์ฒด ๊ฐ„ ์–•์€ ๋น„๊ต๋ฅผ ํ•œ ๋ฒˆ ๋” ์ˆ˜ํ–‰

  • ๊ฐ์ฒด ๊ฐ„ ์–•์€ ๋น„๊ต

    • ์ฒซ ๋ฒˆ์งธ ๊นŠ์ด์— ์กด์žฌํ•˜๋Š” ๊ฐ’๋งŒ ๋น„๊ต

    Object.is๋Š” ES6์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์•กํŠธ์—์„œ๋Š” ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ฆฌํ•„(Polyfill)์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.

  • ํด๋ฆฌํ•„(polyfill)

    • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ง€์› ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณ€ํ™˜ํ•œ ์ฝ”๋“œ

      ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด์ž.

      <script>
      //ObjectIs ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ shallowEqual๋ผ๋Š” ํ•จ์ˆ˜ ์ƒ์„ฑ
      //์•„๋ž˜ ๋งํฌ ์ฐธ๊ณ 
     
      //Object.is๋Š” ์ฐธ์กฐ๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋Œ€ํ•ด ๋น„๊ต๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ
      Object.is({ hello: 'world'}, { hello: 'world' }) // false 
      
    // shallowEqualํ•จ์ˆ˜๋Š” ๊ฐ์ฒด์˜ 1 depth๊นŒ์ง€๋Š” ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅ
      shallowEqual({ hello: 'world'}, { hello: 'world' }) // true
     // 2 depth๊นŒ์ง€ ๊ฐ€๋ฉด ์ด๋ฅผ ๋น„๊ตํ•  ๋ฐฉ๋ฒ•์ด ์—†์œผ๋ฏ€๋กœ false๋ฅผ ๋ฐ˜ํ™˜
      shallowEqual({hello: {hi: 'world'}},{hello: {hi: 'world'}})//false
      
      </script>

๐Ÿ‘๐Ÿป ์ฐธ๊ณ 

objectIs

shallowEqual

๊ทธ๋ ‡๋‹ค๋ฉด ์™œ? ์–ด๋””์„œ ์–ด๋–ป๊ฒŒ Object.is๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

  • props๊ฐ€ ๊นŠ์–ด์ง€๋Š” ๊ฒฝ์šฐ

  • ๊ฐ์ฒด ์•ˆ์— ๋˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ

๐ŸŽฏ ์ •๋ฆฌ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋ฆฌ์•กํŠธ์˜ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์—์„œ๋„ ํ•œ๊ณ„๋ฅผ ๋›ฐ์–ด๋„˜์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์–•์€ ๋น„๊ต๋งŒ์„ ์‚ฌ์šฉํ•ด ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ ์žˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์ง•์„ ์ž˜ ์ˆ™์ง€ํ•œ๋‹ค๋ฉด ํ–ฅ ํ›„

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ›…์˜ ์˜์กด์„ฑ ๋ฐฐ์—ด์˜ ๋น„๊ต

๋ Œ๋”๋ง ๋ฐฉ์ง€๋ฅผ ๋„˜์–ด์„  useMemo์™€ useCallback์˜ ํ•„์š”์„ฑ

๋ Œ๋”๋ง ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด์„œ ๊ผญ ํ•„์š”ํ•œ React.memo๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™์‹œํ‚ค๊ธฐ ์œ„ํ•ด

๊ณ ๋ คํ•ด์•ผ ํ•  ๊ฒƒ๋“ค์„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ์„ ๊ฐํžˆ ์ด์•ผ๊ธฐํ•˜์ž๋ฉด ์ด ์ฑ•ํ„ฐ์˜ ๋‚ด์šฉ ์ „์ฒด๋ฅผ ์ดํ•ด ํ•˜๋ ค๋ฉด
JS, React์— ๋Œ€ํ•ด ์–ด๋А์ •๋„ ์ˆ™์ง€ํ•œ ์ƒํƒœ์ธ ์‚ฌ๋žŒ์ด์—ฌ์•ผ 
๋‚ด์šฉ ์ „์ฒดํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์ˆ˜์›”ํ•  ๊ฒƒ ๊ฐ™๋‹ค.
์ด๋ฒˆ ์ฑ•ํ„ฐ์˜ ํ•™์Šต๋‚ด์šฉ์€ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ 
๋‚˜๋ฆ„๋Œ€๋กœ ์ดํ•ดํ•œ ๋‚ด์šฉ์„ ๋‚˜๋งŒ์˜ ๋ฐฉ์‹์œผ๋กœ 
ํ’€์–ด์„œ ์ž‘์„ฑํ–ˆ๋‹ค.

โžก๏ธ ๋‹ค์Œ์€ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

profile
โ˜„๏ธ

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