[JavaScript] DOM์ด๋ž€?

Yeoonniiยท2022๋…„ 8์›” 13์ผ
0

JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
1/2
post-thumbnail

DOM(Document Object Model)

DOM์ด๋ž€ Document Object Model = ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฌธ์„œ ๊ฐ์ฒด๋ž€ <html>์ด๋‚˜ <body> ๊ฐ™์€ html์˜ ํƒœ๊ทธ๋“ค์„ JavaScript๊ฐ€ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด(object)๋กœ ๋งŒ๋“ ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ณ ,
  • ๋ชจ๋ธ์ด๋ผ๋Š” ๋ง์˜ ๋œป์€ ๋ฌธ์„œ ๊ฐ์ฒด๋ฅผ ์ธ์‹ํ•˜๊ฑฐ๋‚˜ ํ•ด์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.

์ฆ‰, DOM(Document Object Model, ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ)์ด๋ž€
JavaScript๊ฐ€ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด(object)๋กœ ๋งŒ๋“ <html>์ด๋‚˜ <body> ๊ฐ™์€ html๋ฌธ์„œ์˜ ํƒœ๊ทธ๋“ค์„ ์ธ์‹ํ•˜๊ฑฐ๋‚˜ ํ•ด์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

DOM์˜ tree๊ตฌ์กฐ

DOM์€ tree ํ˜•์‹์˜ ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์€ ์›น๋ฌธ์„œ์˜ DOM์˜ tree ๊ตฌ์กฐ๋ฅผ ํ™•์ธํ•ด๋ณด์ž

<!DOCTYPE html>
<html>
<head>
  <title>DOM์ด๋ž€?</title>
</head>
<body>
  <h1 class="title">์ œ๋ชฉ ์˜์—ญ</h1>
  <p class="content">๋ณธ๋ฌธ ์˜์—ญ</p>
</body>
</html>

์œ„ ์ฝ”๋“œ์˜ tree ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

DOM์˜ tree ๊ตฌ์กฐ๋Š” ์œ„์™€ ๊ฐ™์ด ๋…ธ๋“œ์™€ ๊ฐ€์ง€๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
๊ฐ ๋ฐ•์Šค๊ฐ€ ๋…ธ๋“œ์ด๊ณ  ๋…ธ๋“œ์™€ ๋…ธ๋“œ ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๊ด€๊ณ„๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์žˆ๋Š” ์„ ์ด ๊ฐ€์ง€์ด๋‹ค.

์œ„ tree ๊ตฌ์กฐ์—์„œ

  • DOM์€ <body> ํƒœ๊ทธ๋ฅผ ์•„๋ž˜์˜ <h1>๊ณผ <p>์˜ ๋ถ€๋ชจ ์š”์†Œ๋กœ ์ธ์‹ํ•˜๊ณ , <h1>๊ณผ <p>ํƒœ๊ทธ๋Š” <body>์˜ ์ž์‹ ์š”์†Œ๋กœ ์ธ์‹ํ•œ๋‹ค
  • ๋…ธ๋“œ๋Š” ์›น ๋ฌธ์„œ์˜ HTML ํƒœ๊ทธ ์š”์†Œ๋งŒ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ชจ๋“  ํ…์ŠคํŠธ์™€ ์ด๋ฏธ์ง€, ํƒœ๊ทธ์˜ ์†์„ฑ๊นŒ์ง€ ๊ฐ์ฒดํ™”ํ•˜์—ฌ DOM tree(ํŠธ๋ฆฌ)์— ํ‘œํ˜„ํ•œ๋‹ค.

๐Ÿ‘‰ treeํ˜• ์ž๋ฃŒ ๊ตฌ์กฐ๋ž€?

  • ํ•˜๋‚˜์˜ Root node(=๋ฟŒ๋ฆฌ)์—์„œ ์‹œ์ž‘๋œ๋‹ค.
  • tree์—์„œ๋Š” ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์œ„์ชฝ์— ์œ„์น˜ํ•œ ๋…ธ๋“œ๋ฅผ parent node(=๋ถ€๋ชจ),์•„๋žซ์ชฝ ๋…ธ๋“œ๋ฅผ child node(=์ž์‹)๋ผ๊ณ  ํ•œ๋‹ค.
  • Root node๋Š” ๊ฐ€์žฅ ์œ„์—์„œ ์‹œ์ž‘๋˜๋Š” node์ด๊ธฐ ๋•Œ๋ฌธ์— parent node(=๋ถ€๋ชจ)๊ฐ€ ์—†๋Š” node๊ฐ€ ๋˜๊ณ , ๋ฐ˜๋Œ€๋กœ children(์ž์‹)์ด ์—†๋Š” node๋ฅผ Leaf node(=์žŽ) ๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • ์ด๋Ÿฌํ•œ treeํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฟŒ๋ฆฌ(root)์—์„œ ์‹œ์ž‘ํ•ด์„œ ์žŽ(leaf)์—์„œ ๋๋‚˜๋Š” ๊ตฌ์กฐ์ด๋‹ค!

๐Ÿ‘‰ node(๋…ธ๋“œ) ๋ž€?

  • tree ๊ตฌ์กฐ์—์„œ Root node๋ฅผ ํฌํ•จํ•œ ๊ฐ๊ฐ์˜ ๊ฐœ์ฒด๋ฅผ node๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.
    = ๊ทธ๋ฆผ์—์„œ๋Š” ๋ฐ•์Šคํ•˜๋‚˜๊ฐ€ node๋ฅผ ์˜๋ฏธํ•œ๋‹ค
  • <head>, <body>, <title>, <script>, <h1> ๋“ฑ์˜ ํƒœ๊ทธ๋ฟ ์•„๋‹ˆ๋ผ ํƒœ๊ทธ ์•ˆ์˜ ํ…์ŠคํŠธ๋‚˜ ์†์„ฑ ๋“ฑ๋„ ๋ชจ๋‘ node์— ์†ํ•œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ DOM

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

JavaScript๋Š” DOM์„ ํ†ตํ•ด ์›น ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•˜๊ณ , ํŽ˜์ด์ง€๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋˜ํ•œ ์ด์šฉ์ž์˜ ํ–‰๋™์— ๋”ฐ๋ผ HTML, CSS๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉฐ ์ด์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ’ก๊ฒฐ๊ณผ์ ์œผ๋กœ DOM์€ web page๋ฅผ ๋ณด๋‹ค ๋” ๋™์ ์œผ๋กœ(interactive) ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ browser๊ฐ€ ๋งŒ๋“  ๊ฐ์ฒด๋ผ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ DOM์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ ์ด๋‹ค.
DOM์€ ์›น ๋ฌธ์„œ์—์„œ๋งŒ ์กด์žฌํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•ด์ฃผ๋Š” ํ•˜๋‚˜์˜ ์š”์†Œ์ผ ๋ฟ์ด๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด ์›น ํŽ˜์ด์ง€๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ์›๋ณธ html ๋ฌธ์„œ ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ DOM์„ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


๐ŸŒŽ ์ฐธ๊ณ 
http://www.tcpschool.com/xml/xml_dom_concept
https://m.blog.naver.com/magnking/220972680805
https://im-developer.tistory.com/100

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