๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฐ ์–ธ์–ด/JS

๋ธŒ๋ผ์šฐ์ €์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(1) - ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ DOM

์ฑ… <๋Ÿฌ๋‹์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ>๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ๋ฐฐ์šด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

๋ชฉ์ฐจ

  • 1. ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ(DOM, document object model)
  • 2. DOM API(Application Programming Interface)
  • 3. DOM tree
  • 3-1) DOM tree๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋„ค์ข…๋ฅ˜ ๋…ธ๋“œ

 

<๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ(DOM)>

1. ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ(DOM, document object model) - HTML๋ฌธ์„œ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ํ•ต์‹ฌ

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

 

 

2. DOM API(Application Programming Interface)

  • ์ •์ ์ธ ์›นํŽ˜์ด์ง€์— ์ ‘๊ทผํ•˜์—ฌ ๋™์ ์œผ๋กœ ์›นํŽ˜์ด์ง€๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•œ ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์กด์žฌํ•˜๋Š” DOM์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด๊ณ , ์ด๋•Œ ํ•„์š”ํ•œ ๊ฒƒ์ด DOM์— ์ ‘๊ทผํ•˜๊ณ  ๋ณ€๊ฒฝํ•˜๋Š” ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ์˜ ์ง‘ํ•ฉ์ธ DOM API์ด๋‹ค.
  • DOM์€ HTML, ECMAScript์—์„œ ์ •์˜ํ•œ ํ‘œ์ค€์ด ์•„๋‹Œ ๋ณ„๊ฐœ์˜ W3C์˜ ๊ณต์‹ ํ‘œ์ค€์ด๋ฉฐ ํ”Œ๋žซํผ/ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ค‘๋ฆฝ์ ์ด๋‹ค.
  • DOM์€ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•œ๋‹ค.
  1. HTML ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋ชจ๋ธ ๊ตฌ์„ฑ : ๋ธŒ๋ผ์šฐ์ €๋Š” HTML ๋ฌธ์„œ๋ฅผ ๋กœ๋“œํ•œ ํ›„ ํ•ด๋‹น ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋ชจ๋ธ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑํ•œ๋‹ค. ์ด๋•Œ ๋ชจ๋ธ์€ ๊ฐ์ฒด์˜ ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ ์ด๊ฒƒ์„ DOM tree๋ผ ํ•œ๋‹ค.
  2. HTML ๋ฌธ์„œ ๋‚ด์˜ ๊ฐ ์š”์†Œ์— ์ ‘๊ทผ / ์ˆ˜์ • : DOM์€ ๋ชจ๋ธ ๋‚ด์˜ ๊ฐ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. DOM์ด ์ˆ˜์ •๋˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ฒŒ ๋  ๋‚ด์šฉ ๋˜ํ•œ ๋ณ€๊ฒฝ๋œ๋‹ค.

 

 

3. DOM tree

  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTML ๋ฌธ์„œ๋ฅผ ๋กœ๋“œํ•œ ํ›„ ํŒŒ์‹ฑํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋ธ
  • DOM์—์„œ ๋ชจ๋“  ์š”์†Œ, ์–ดํŠธ๋ฆฌ๋ทฐํŠธ, ํ…์ŠคํŠธ๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด์ด๋ฉฐ Document ๊ฐ์ฒด์˜ ์ž์‹์ด๋‹ค. ์š”์†Œ์˜ ์ค‘์ฒฉ๊ด€๊ณ„๋Š” ๊ฐ์ฒด์˜ ํŠธ๋ฆฌ๋กœ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ๋ถ€์ž๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.

 

3-1) DOM tree๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋„ค์ข…๋ฅ˜ ๋…ธ๋“œ

  • ๋ฌธ์„œ ๋…ธ๋“œ(Document Node) - ํŠธ๋ฆฌ์˜ ์ตœ์ƒ์œ„์— ์กด์žฌํ•˜๋ฉฐ ๊ฐ๊ฐ ์š”์†Œ, ์–ดํŠธ๋ฆฌ๋ทฐํŠธ, ํ…์ŠคํŠธ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋ฌธ์„œ ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰, DOM tree์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์ž‘์ (entry point)์ด๋‹ค.
  • ์š”์†Œ ๋…ธ๋“œ(Element Node) - ์š”์†Œ ๋…ธ๋“œ๋Š” HTML ์š”์†Œ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. HTML ์š”์†Œ๋Š” ์ค‘์ฒฉ์— ์˜ํ•ด ๋ถ€์ž ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๋ฉฐ ์ด ๋ถ€์ž ๊ด€๊ณ„๋ฅผ ํ†ตํ•ด ์ •๋ณด๋ฅผ ๊ตฌ์กฐํ™”ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์š”์†Œ ๋…ธ๋“œ๋Š” ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๋ฅผ ์„œ์ˆ ํ•œ๋‹ค๊ณ  ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค. ์–ดํŠธ๋ฆฌ๋ทฐํŠธ, ํ…์ŠคํŠธ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋จผ์ € ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค. ๋ชจ๋“  ์š”์†Œ ๋…ธ๋“œ๋Š” ์š”์†Œ๋ณ„ ํŠน์„ฑ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด HTMLElement ๊ฐ์ฒด๋ฅผ ์ƒ์†ํ•œ ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. 
  • ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ(Attribute Node) - ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ๋Š” HTML ์š”์†Œ์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋…ธ๋“œ๋Š” ํ•ด๋‹น ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๊ฐ€ ์ง€์ •๋œ ์š”์†Œ์˜ ์ž์‹์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น ์š”์†Œ์˜ ์ผ๋ถ€๋กœ ํ‘œํ˜„๋œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ์š”์†Œ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ์ ‘๊ทผํ•˜๋ฉด ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์ฐธ์กฐ, ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ…์ŠคํŠธ ๋…ธ๋“œ(Text Node) - ํ…์ŠคํŠธ ๋…ธ๋“œ๋Š” HTML ์š”์†Œ์˜ ํ…์ŠคํŠธ๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. ํ…์ŠคํŠธ ๋…ธ๋“œ๋Š” ์š”์†Œ ๋…ธ๋“œ์˜ ์ž์‹์ด๋ฉฐ ์ž์‹ ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค. ์ฆ‰, ํ…์ŠคํŠธ ๋…ธ๋“œ๋Š” DOM tree์˜ ์ตœ์ข…๋‹จ์ด๋‹ค.

 

โ€ปDOM ํŠธ๋ฆฌ๋ฅผ ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ• : ๊ฐœ๋ฐœ์ž๋„๊ตฌ(Developer Tools)์˜ Elements๋ฅผ ์„ ํƒํ•œ ํ›„ ์˜ค๋ฅธ์ชฝ์˜ properties์„ ์„ ํƒ