๐Ÿ“š DOM ๊ตฌ์กฐ๋Š” ์ž์‹์˜ ์ค‘์ฒฉ๋œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–์ง€ ์•Š๋Š”๊ฐ€?

MIloยท2025๋…„ 6์›” 10์ผ

1. DOM์˜ ๊ฐœ๋…์  ๊ตฌ์กฐ: ์ค‘์ฒฉ๋œ ํŠธ๋ฆฌ(Tree)

HTML์€ ์ค‘์ฒฉ์„ ํ†ตํ•ด ์‹œ๊ฐ์  ๊ณ„์ธต์„ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค:

<div>
  <h1>์ œ๋ชฉ</h1>
  <p>
    <span>๋‚ด์šฉ</span>
  </p>
</div>


- <div>๋Š” <h1>, <p>์˜ ๋ถ€๋ชจ
- <p>๋Š” <span>์˜ ๋ถ€๋ชจ
- **๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฅผ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ํŒŒ์‹ฑ**ํ•จ
  

๐Ÿ“Œ ์ด ๊ตฌ์กฐ๋Š” ๋ถ€๋ชจ โ†’ ์ž์‹ โ†’ ์ž์‹์˜ ์ž์‹์œผ๋กœ ์ด์–ด์ง€๋Š” ๊ณ„์ธต์ (ํŠธ๋ฆฌ) DOM ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค.


2. DOM์˜ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ: ํ‰ํ‰ํ•œ ์ž์‹ ๋ชฉ๋ก (Flat List)

ํ•˜์ง€๋งŒ DOM ๋‚ด๋ถ€์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

const div = document.querySelector('div');
console.log(div.children); // => HTMLCollection(2) [ <h1>, <p> ]
  • div.children์€ ์˜ค์ง ์ง์† ์ž์‹๋งŒ ํฌํ•จ
  • span์€ ํฌํ•จ๋˜์ง€ ์•Š์Œ (์†์ž์ด๊ธฐ ๋•Œ๋ฌธ)
  • ์ฆ‰, ์ž์‹ ๋ชฉ๋ก์€ ํ•ญ์ƒ 1์ฐจ์› ๋ฐฐ์—ด ๊ตฌ์กฐ

โ— DOM์€ 2์ฐจ์› ๋ฐฐ์—ด ๊ฐ™์€ ์ค‘์ฒฉ ๊ตฌ์กฐ๋ฅผ ๊ฐ–์ง€ ์•Š์Œ


3. ์™œ React๋Š” ์ž์‹ ๋…ธ๋“œ๋ฅผ ํ‰ํƒ„ํ™”(flatten)ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

React๋Š” JSX์™€ JS๋กœ UI๋ฅผ ๊ธฐ์ˆ ํ•˜๋Š”๋ฐ, ์ด๋Š” ์ข…์ข… ์ค‘์ฒฉ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด๋ƒ…๋‹ˆ๋‹ค:

<ul>
  {[
    <li>1</li>,
    [<li>2</li>, <li>3</li>],
    <li>4</li>
  ]}
</ul>
  • ์œ„ ๊ตฌ์กฐ๋Š” JS์—์„œ๋Š” ํ•ฉ๋ฒ•์ด์ง€๋งŒ, DOM์—์„œ๋Š” ๋น„ํ•ฉ๋ฒ•
  • DOM์€ ul ํƒœ๊ทธ์˜ ์ž์‹์ด ํ‰ํ‰ํ•œ ๋ฆฌ์ŠคํŠธ์—ฌ์•ผ ํ•จ

๐Ÿ”ง ๊ทธ๋ž˜์„œ React๋Š” createElement ํ˜ธ์ถœ ์‹œ ์ž์‹๋“ค์„ ์ž๋™์œผ๋กœ ํ‰ํƒ„ํ™” ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

React.createElement('ul', null, ...flatten(children));


4. ์š”์•ฝ

  • DOM์€ ๊ฐœ๋…์ ์œผ๋กœ๋Š” ํŠธ๋ฆฌ์ด์ง€๋งŒ, ์‹ค์ œ ์ž์‹ ๊ด€๋ฆฌ๋Š” 1์ฐจ์› ๋ชฉ๋ก
  • React๋Š” JSX๊ฐ€ ์ƒ์„ฑํ•œ ์ค‘์ฒฉ ๋ฐฐ์—ด์„ ํ‰ํƒ„ํ™”ํ•˜์—ฌ DOM๊ณผ ํ˜ธํ™˜์‹œํ‚ด
  • ์ด ๊ตฌ์กฐ์  ์ดํ•ด๋Š” ์ง์ ‘ ๋ Œ๋”๋Ÿฌ๋‚˜ ๊ฐ€์ƒ๋”์„ ๊ตฌํ˜„ํ•  ๋•Œ ํ•ต์‹ฌ
profile
์•ต๋งน!

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