[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ] React ์‹ฌํ™” - Virtual DOM

JiEunยท2023๋…„ 5์›” 19์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

React์— ๋Œ€ํ•ด ์ข€ ๋” ์‹ฌํ™”์ ์ธ ๋ถ€๋ถ„์— ํ•™์Šตํ–ˆ๋‹ค.


โœ๏ธ ๋ฐฐ์šด ๊ฒƒ

React๋Š” UI์˜ ์ƒํƒœ๋ฅผ ์ถ”์ ํ•˜๊ณ  ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚œ ์š”์†Œ๋“ค์„ ๋น ๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ€์ƒ DOM์ด๋ผ๋Š” ๊ฐ€์ƒ์˜ DOM ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

๊ฐ€์ƒ DOM์ด ์ƒ๊ธฐ๊ฒŒ ๋œ ์ด์œ ๋Š” ์ด์ „ DOM์œผ๋กœ ๋ถ€ํ„ฐ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€์•ผํ•œ๋‹ค.

DOM(Document Object Model)

  • ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ์„ ์˜๋ฏธํ•œ๋‹ค.
  • DOM์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML ๋ฌธ์„œ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํŠธ๋ฆฌ ๊ตฌ์กฐํ™”ํ•œ ๊ฐ์ฒด ๋ชจ๋ธ์ด๋‹ค.
  • DOM์€ ๊ณ„์ธต์  ํ˜•ํƒœ์˜ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๊ตฌ์ •๋˜์–ด ์žˆ๋‹ค. ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘์—์„œ๋„ ํŠธ๋ฆฌ๋Š” ์ •์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋” ํšจ๊ณผ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ ๋˜์–ด, ๋น ๋ฅธ ์ž๋ฃŒ ํƒ์ƒ‰ ์„ฑ๋Šฅ์ด ์žฅ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ DOM์ด ๋ณ€๊ฒฝ๋˜๊ณ  ์—…๋ฐ์ดํŠธ๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์€ ๊ฒฐ๊ตญ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„ ๋˜ํ•œ ๋ฆฌํ”Œ๋กœ์šฐ(Reflow)ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

๋ฆฌํ”Œ๋กœ์šฐ?

  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๊ณ  ํ™”๋ฉด์— ๋ฐ˜์˜ํ•˜๋Š” ๊ณผ์ •
  • ๋ฆฌํ”Œ๋กœ์šฐ๋Š” ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š” ๋น„์šฉ์ด ํฐ ์ž‘์—…์ด๋‹ค.

์ฆ‰, ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ƒ๊ฒผ์„ ๊ฒฝ์šฐ ๊ทธ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ๋ณ€๊ฒฝ ๋˜๋Š”๊ฒŒ ์•„๋‹Œ ๋‚˜๋จธ์ง€ ์˜์—ญ๋„ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์ง„๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

Virtual DOM

  • JavaScript ๊ฐ์ฒด๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฐ€์ƒ์˜ DOM ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด, ์‹ค์ œ DOM ์กฐ์ž‘์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

  • ๊ฐ€์ƒ DOM์€ ์‹ค์ œ DOM๊ณผ ๋™๊ธฐํ™”๋˜์–ด, ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๋งˆ๋‹ค ๊ฐ€์ƒ DOM์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด ์ด์ „ ์ƒํƒœ์™€ ๋น„๊ตํ•œ๋‹ค. ๋น„๊ต ํ›„ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ๋ฐ˜์˜ํ•ด ์—…๋ฐ์ดํŠธํ•˜๊ธฐ์— ๊ธฐ์กด ์˜์—ญ์„ ๋‹ค์‹œ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๋‹ค.

  • ๊ฐ€์ƒ DOM์€ ์ถ”์ƒํ™”๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • diffing ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ์ด์ „ ์ƒํƒœ์™€ ํ˜„์žฌ ์ƒํƒœ์˜ ๊ฐ€์ƒ DOM์„ ๋น„๊ตํ•œ๋‹ค.

Virtual DOM์€ ๋น ๋ฅด๋‹ค?

๊ฐ€์ƒ DOM์€ ์‹ค์ œ DOM์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์ด ๋งž์ง€๋งŒ, ๋ชจ๋“  ๊ฒฝ์šฐ์— ๊ทธ๋ ‡์ง€๋Š” ์•Š๋‹ค.
๋•Œ๋กœ๋Š” ์ง์ ‘ DOM์„ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
์‹ค์ œ DOM ์กฐ์ž‘์ด ๋Š๋ ค์ง€๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ๋Š” DOM ์กฐ์ž‘์ด ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค์‹œ ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•˜๊ณ , ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ข‹์€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„  ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋ Œ๋”๋ง์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์ ํ™” ์ž‘์—…์—๋„ ๊ด€์‹ฌ์„ ๊ธฐ์šธ์—ฌ์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

React Diffing Algorithm

  • React๋Š” ๋‘ ๊ฐ€์ง€์˜ ๊ฐ€์ •์„ ๊ฐ€์ง€๊ณ  ์‹œ๊ฐ„ ๋ณต์žก๋„ O(n)์˜ ์ƒˆ๋กœ์šด ํœด๋ฆฌ์Šคํ‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Heuristic Algorithm)์„ ๊ตฌํ˜„ ํ•œ๋‹ค.

ํœด๋ฆฌ์Šคํ‹ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Heuristic Algorithm)?

  • ๊ฐ€์ƒ DOM ์—…๋ฐ์ดํŠธ ๊ณผ์ •์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋น„๊ต ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ํšจ์œจ์ ์ธ ๊ฐ€์ƒ ๋”์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

๋‘๊ฐ€์ง€ ๊ฐ€์ •

  1. ๊ฐ๊ธฐ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์š”์†Œ๋Š” ๋‹ค๋ฅธ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•  ๊ฒƒ์ด๋‹ค.
  2. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ๊ณตํ•˜๋Š” keyํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ , ์—ฌ๋Ÿฌ ๋ฒˆ ๋ Œ๋”๋ง์„ ๊ฑฐ์ณ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ๋ง์•„์•ผ ํ•˜๋Š” ์ž์‹ ์š”์†Œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

React๋Š” ๋น„๊ต ์•Œ๊ณ ๋ฆฌ์ฆ˜(Diffing Algorithm)์„ ์‚ฌ์šฉํ•œ๋‹ค.

React๋Š” ๊ธฐ์กด์˜ ๊ฐ€์ƒ DOM ํŠธ๋ฆฌ์™€ ์ƒˆ๋กญ๊ฒŒ ๋ณ€๊ฒฝ๋œ ๊ฐ€์ƒ DOM ํŠธ๋ฆฌ๋ฅผ ๋น„๊ตํ•  ๋•Œ
ํŠธ๋ฆฌ์˜ ๋ ˆ๋ฒจ ์ˆœ์„œ๋Œ€๋กœ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค. (๊ฐ™์€ ๋ ˆ๋ฒจ(์œ„์น˜)๋ผ๋ฆฌ ๋น„๊ตํ•œ๋‹ค - ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)์˜ ์ด์ข…์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.)

๋‹ค๋ฅธ ํƒ€์ž…์˜ DOM ์—˜๋ฆฌ๋จผํŠธ์˜ ๊ฒฝ์šฐ

  • DOM ํŠธ๋ฆฌ๋Š” ๊ฐ HTML ํƒœ๊ทธ๋งˆ๋‹ค ๊ฐ๊ฐ์˜ ๊ทœ์น™์ด ์žˆ์–ด ์ž์‹ ํƒœ๊ทธ๊ฐ€ ํ•œ์ •์ ์ด๋ผ๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.
    (ex - ul, ol์—๋Š” li, pํƒœ๊ทธ ์•ˆ์— pํƒœ๊ทธ ์‚ฌ์šฉ ๋ชป ํ•จ ๋“ฑ)
  • ์ฆ‰, ์ด๋Ÿฌํ•œ ํŠน์ง•์œผ๋กœ ๋ถ€๋ชจ ํƒœ๊ทธ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค๋ฉด React๋Š” ์ด์ „ ํŠธ๋ฆฌ๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค.
<div>
	<Counter />
</div>

//๋ถ€๋ชจ ํƒœ๊ทธ๊ฐ€ div์—์„œ span์œผ๋กœ ๋ณ€๊ฒฝ
<span>
	<Counter />
</span>
  • ๊ธฐ์กด ํŠธ๋ฆฌ๋Š” ๋ฒ„๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ํŠธ๋ฆฌ๋กœ ๊ตฌ์ถ•ํ•˜๊ธฐ์— ์ด์ „์˜ DOM ๋…ธ๋“œ๋“ค์€ ์ „๋ถ€ ์—†์–ด์ ธ ๋ฒ„๋ฆฐ๋‹ค.
    ๊ธฐ์กด์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ์™„์ „ํžˆ ํ•ด์ œ(Unmount)๋˜์–ด ๋ฒ„๋ฆฌ๊ธฐ์— <Counter />๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋˜ ๊ธฐ์กด์˜ state๋„ ๊ฐ™์ด ์—†์–ด์ ธ ๋ฒ„๋ฆฐ๋‹ค.

๊ฐ™์€ ํƒ€์ž…์˜ DOM ์—˜๋ฆฌ๋จผํŠธ์ธ ๊ฒฝ์šฐ

  • ํƒ€์ž…์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ตœ๋Œ€ํ•œ ๋ Œ๋”๋ง ํ•˜์ง€ ์•Š๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ตœ์†Œํ•œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
  • ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒ๊ธธ ๊ฒฝ์šฐ ๊ฐ€์ƒ DOM๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ๋งŒ ์ˆ˜์ •ํ•œ ๋’ค, ๋ชจ๋“  ๋…ธ๋“œ์— ๊ฑธ์นœ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋๋‚˜๋ฉด ๊ทธ ๋•Œ ํ•œ ๋ฒˆ๋งŒ ์‹ค์ œ DOM์œผ๋กœ ๋ Œ๋”๋ง์„ ์‹œ๋„ํ•œ๋‹ค.
<div className="before"  />

//className๋งŒ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.
<div className="after" />

๋‘ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋น„๊ตํ–ˆ์„ ๋•Œ React๋Š” ์ •ํ™•์‹œ className์ด ๋ณ€๊ฒฝ ๋˜์—ˆ์Œ์„ ๋ˆˆ์น˜ ์ฑˆ๋‹ค.
๋‚˜๋จธ์ง€๋Š” ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  className๋งŒ ์ˆ˜์ •ํ•œ๋‹ค.

ํ•˜๋‚˜์˜ DOM ๋…ธ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•œ ๋’ค React๋Š” ๋’ค์ด์–ด ํ•ด๋‹น ๋…ธ๋“œ๋“ค ๋ฐ‘์˜ ์ž์‹๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋™์‹œ์— ์ˆœํšŒํ•˜๋ฉด์„œ ์ฐจ์ด๊ฐ€ ๋ฐœ๊ฒฌ๋  ๋•Œ ๋งˆ๋‹ค ๋ณ€๊ฒฝํ•œ๋‹ค. ์ด๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

์ž์‹ ์—˜๋ฆฌ๋จผํŠธ์˜ ์žฌ๊ท€์  ์ฒ˜๋ฆฌ

<ul>
  <li>1</li>
  <li>2</li>
</ul>

//์ž์‹ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ฒ˜์Œ์— ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ
<ul>
  <li>0</li>
  <li>1</li>
  <li>2</li>
</ul>

์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ฒ˜์Œ์— ๋ฐฐ์น˜ํ•  ๊ฒฝ์šฐ React๋Š” ์ฒ˜์Œ์˜ ๋…ธ๋“œ ๋ถ€ํ„ฐ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋น„๊ตํ•  ๋•Œ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅด๋‹ค๊ณ  ์ธ์ง€ํ•˜๊ฒŒ ๋˜์–ด ๋ฆฌ์ŠคํŠธ ์ „์ฒด๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค๊ณ  ํŒ๋‹จํ•œ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ๊ทธ๋Œ€๋กœ ์ด์ง€๋งŒ ๊ทธ ๋ถ€๋ถ„์„ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์ „๋ถ€ ์ƒˆ๋กญ๊ฒŒ ๋ Œ๋”๋งํ•ด๋ฒ„๋ฆฌ๋Š” ๋น„ํšจ์œจ์ ์ธ ๋™์ž‘์„ ํ•œ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด key๋ผ๋Š” ์†์„ฑ์„ ์ง€์›ํ•œ๋‹ค.
๊ฐœ๋ฐœ ํ•  ๋•Œ key๋ผ๋Š” ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„ ์˜ค๋ฅ˜๊ฐ€ ๋œฐ ๋•Œ๊ฐ€ ์žˆ์„ ๊ฑฐ๋‹ค. ๊ทธ ์˜ค๋ฅ˜ ์ด๋•Œ๋ฌธ์ด๋‹ค.

ํ‚ค (key)

๋งŒ์•ฝ ์ž์‹ ๋…ธ๋“œ๋“ค์ด key๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค๋ฉด React๋Š” ํ•ด๋‹น key๋ฅผ ์ด์š”ํ•ด ๊ธฐ์กด ํŠธ๋ฆฌ์˜ ์ž์‹๊ณผ ์ƒˆ๋กœ์šด ํŠธ๋ฆฌ์˜ ์ž์‹์ด ์ผ์น˜ํ•˜๋Š”์ง€ ์•„๋‹Œ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

map()๋ฉ”์„œ๋“œ๋ฅผ ํ•  ๋•Œ key๊ฐ’์ด ํ•„์š”ํ•œ ์ด์œ ๋„ ์—ฌ๊ธฐ์— ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

<ul>
  <li key="1">1</li>
  <li key="2">2</li>
</ul>

//key๊ฐ€ 0์ธ ์ž์‹ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ฒ˜์Œ์— ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ
<ul>
  <li key="0">0</li>
  <li key="1">1</li>
  <li key="2">2</li>
</ul>

React๋Š” key ์†์„ฑ์„ ํ†ตํ•ด 0์ด๋ผ๋Š” ์ž์‹ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ƒ๊ฒผ๊ณ  ๋‚˜๋จธ์ง€ key๋ฅผ ๊ฐ€์ง„ ์—˜๋ฆฌ๋จผํŠธ๋Š” ๊ทธ์ € ์œ„์น˜๋ฉด ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๋Š”๊ฑธ ์•Œ๊ฒŒ ๋˜์–ด ๋‹ค๋ฅธ ์ž์‹ ์—˜๋ฆฌ๋จผํŠธ๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ถ”๊ฐ€๋œ ์—˜๋ฆฌ๋จผํŠธ๋งŒ ๋ณ€๊ฒฝํ•œ๋‹ค.

key์†์„ฑ์—๋Š” ๋ณดํ†ต ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ƒ์˜ ์œ ๋‹ˆํฌํ•œ ๊ฐ’(ex - id)์„ ๋ถ€์—ฌํ•ด ์ค€๋‹ค.
๊ทธ ๊ฐ’์€ ์ „์—ญ์ ์œผ๋กœ ์œ ์ผํ•  ํ•„์š”๋Š” ์—†์œผ๋‚˜ ํ˜•์ œ ์—˜๋ฆฌ๋จผํŠธ ์‚ฌ์ด์—์„œ๋Š” ์œ ์ผํ•ด์•ผํ•œ๋‹ค.

๋งŒ์•ฝ ์œ ๋‹ˆํฌํ•œ ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ key ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๋ฐฐ์—ด์ด ๋‹ค๋ฅด๊ฒŒ ์ •๋ ฌ๋  ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๋น„ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘๋  ์ˆ˜๋„ ์žˆ๋‹ค.


๐Ÿ“ ๋งˆ์น˜๋ฉฐ

React๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹์ด๋กœ ์–ด๋–ค์‹์œผ๋กœ ๋ Œ๋”๋งํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.
๋˜ํ•œ key๊ฐ’์„ ์™œ ๋ถ€์—ฌํ•˜๋Š”์ง€๋„ ์ด๋ฒˆ ํ•™์Šต์„ ํ†ตํ•ด ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

ํ•ญ์ƒ map์œผ๋กœ ๊ฐ’์„ ๋ณด์—ฌ์ค„ ๋•Œ key๊ฐ’์„ ๋ถ€์—ฌํ•œ๋‹ค๋Š” ์ด์œ ๋„ ์—ฌ๊ธฐ์— ์žˆ๋Š” ๋“ฏ ์‹ถ๋‹ค.

์ตœ๋Œ€ํ•œ id๋ฅผ key๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋˜ ๋Œ€์ฒดํ•  ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ id๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์„ ์ฐธ๊ณ ํ•ด์•ผ๊ฒ ๋‹ค. ๋ฌผ๋ก  ์ด๊ฒŒ ์™„์ „ํ•œ ๋‹ต์€ ์•„๋‹Œ ์ ๋„ ๊ฐ™์ด ์•Œ์•„๋‘์–ด์•ผ๊ฒ ๋‹ค.

๋‹ค๋ฅธ Hook์˜ ๋Œ€ํ•œ ๋‚ด์šฉ๋„ ๋ฐฐ์› ์ง€๋งŒ ๋‚ด์šฉ์ด ๊ธธ์–ด์งˆ ๊ฒƒ ๊ฐ™์•„ ๋ถ„ํ• ํ•ด ์ •๋ฆฌํ•  ์˜ˆ์ •์ด๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

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