๐Ÿ“Web Developing/JavaScript ๊ธฐ์ดˆ

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

Hush 2022. 6. 23. 17:10

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋ฉด DOM์ด๋ž€ ๋ง์„ ์ž์ฃผ ๋งŒ๋‚  ๊ฒƒ์ด๋‹ค.

DOM์€ ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ(document object model)์˜ ์ค„์ž„๋ง์ด๋‹ค.

๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐœ๋…์ด๋‹ˆ ์ž˜ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€์•ผ ํ•œ๋‹ค.

 

๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ์ด๋ž€

์šฐ๋ฆฌ๋Š” ์›น ๋ฌธ์„œ์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋”ฐ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์›น ๋ฌธ์„œ์— ํ…์ŠคํŠธ์™€ ์ด๋ฏธ์ง€๊ฐ€ ๋“ค์–ด ์žˆ๋‹ค๋ฉด ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๋งˆํฌ์—… ์ •๋ณด๋ฅผ ๋ณด๋ฉด์„œ ํ…์ŠคํŠธ ๋‹จ๋ฝ์ด ๋ช‡ ๊ฐœ์ด๊ณ  ๊ทธ ๋‚ด์šฉ์ด ๋ญ‰์„œ์ธ์ง€ ์‚ดํŽด๋ณธ๋‹ค.

๋˜ํ•œ ์ด๋ฏธ์ง€๊ฐ€ ๋ช‡ ๊ฐœ์ด๊ณ  ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” ์–ด๋– ํ•œ์ง€ ๋Œ€์ฒด ํ…์ŠคํŠธ๋Š” ๋ฌด์—‡์ธ์ง€๋„ ํŒŒ์•…ํ•ด์„œ ์ด๋ฏธ์ง€๋ณ„๋กœ ์ •๋ฆฌํ•ด์„œ ์ธ์‹ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ํ…์ŠคํŠธ์™€ ์ด๋ฏธ์ง€ ์š”์†Œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ์–ดํ•˜๋ ค๋ฉด ๋‘ ์š”์†Œ๋ฅผ ๋”ฐ๋กœ ๊ตฌ๋ณ„ํ•˜์—ฌ ์ธ์‹ํ•ด์•ผ ํ•œ๋‹ค.

์ด๋ณด๋‹ค ๋” ๋งŽ์€ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•œ ์›น ๋ฌธ์„œ๋ผ๋ฉด ์š”์†Œ ์‚ฌ์ด์˜ ํฌํ•จ ๊ด€๊ณ„๋„ ์•Œ์•„์•ผ ํ•œ๋‹ค.

 

์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ •๋ณด ์š”์†Œ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๊ฐ€์ ธ์™€ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์ด๋•Œ ์•Œ์•„์•ผ ํ•  ๊ฐœ๋…์ด ์žˆ๋Š”๋ฐ ๋ฐ”๋กœ DOM์ด๋‹ค.

๋‹ค์Œ์€ ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ์„ ์ •์˜ํ•œ ๊ฒƒ์ด๋‹ค

๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ์˜ ์ •์˜
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ๋ฌธ์„œ์— ์ ‘๊ทผํ•˜๊ณ  ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ์›น ๋ฌธ์„œ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

HTML ์–ธ์–ด๋กœ ์ž‘์„ฑํ•œ ์›น ๋ฌธ์„œ์˜ DOM์„  HTML DOM์ด๋ผ๊ณ  ํ•˜๋ฉฐ, XML ๋ฌธ์„œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” XML DOM๋„ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” HTML DOM์„ ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•œ๋‹ค. 

DOM์€ ์›น ๋ฌธ์„œ๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ์ •์˜ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์›น ๋ฌธ์„œ๋ฅผ ์ด๋ฃจ๋Š” ํ…์ŠคํŠธ๋‚˜ ์ด๋ฏธ์ง€, ํ‘œ ๋“ฑ์˜ ๋ชจ๋“  ์š”์†Œ๋„ ๊ฐ๊ฐ ๊ฐ์ฒด๋กœ ์ •์˜ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์›น ๋ฌธ์„œ ์ „์ฒด๋Š” document ๊ฐ์ฒด์ด๊ณ , ์‚ฝ์ž…ํ•œ ์ด๋ฏธ์ง€๋Š” image ๊ฐ์ฒด์ด๋‹ค.

์ด์ฒ˜๋Ÿผ DOM์€ ์›น ๋ฌธ์„œ์™€ ๊ทธ ์•ˆ์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ '๊ฐ์ฒด'๋กœ ์ธ์‹ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค.

์•ž์—์„œ ๋ฐฐ์› ๋˜ ๋ธŒ๋ผ์šฐ์ € ๊ฐ์ฒด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์›น ๋ฌธ์„œ ๊ฐ์ฒด๋„ ๋‹ค์–‘ํ•œ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค.

์šฐ์„  ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ์˜ ๊ตฌ์กธ๋ฅด ๋‚˜ํƒ€๋‚ด๋Š” DOM ํŠธ๋ฆฌ๋ฅผ ์•Œ์•„๋ณด๊ฒ ๋‹ค.

 

DOM ํŠธ๋ฆฌ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ DOM์„ ์กฐ์ž‘ํ•˜๋ ค๋ฉด ์‹ค์ œ ์›น ๋ฌธ์„œ๊ฐ€ DOM์œผ๋กœ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„๋˜๋Š”์ง€ ์•Œ์•„์•ผ ํ•œ๋‹ค.

DOM์€ ์›น ๋ฌธ์„œ์˜ ์š”์†Œ๋ฅผ ๋ถ€๋ชจ ์š”์†Œ์™€ ์ž์‹ ์š”์†Œ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์†Œ์Šค๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์ž.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Do it!</h1>
    <img src="images/EiffleTower.jpg" alt="Eiffle Tower">
</body>
</html>

 

๋‹ค์Œ ๊ทธ๋ฆผ์€ ์œ„ ์ฝ”๋“œ์˜ ๋ถ€๋ชจ์ž์‹ ๊ด€๊ณ„๋ฅผ ์ •๋ฆฌํ•œ ๊ฒƒ์ด๋‹ค.

DOM์˜ ๊ด€์ ์€ ์—ฌ๊ธฐ์„œ ํ•œ ๋‹จ๊ณ„ ๋” ๋ฐœ์ „ํ•˜๋Š”๋ฐ, DOM ์€ ๋ฌธ์„œ ์•ˆ์˜ ์š”์†Œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐ ์š”์†Œ์—์„œ ์‚ฌ์šฉํ•œ ๋‚ด์šฉ๊ณผ ์†์„ฑ๋„ ์ž์‹์œผ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

 

์ด๋ ‡๊ฒŒ ๋ถ€๋ชจ์™€ ์ž์‹ ๊ตฌ์กฐ๋กœ ํ‘œ์‹œํ•˜๋ฉด ๋งˆ์น˜ ๋‚˜๋ฌด ํ˜•ํƒœ๊ฐ€ ๋˜๋ฏ€๋กœ DOM ํŠธ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค.

DOM ํŠธ๋ฆฌ์—์„œ ๊ฐ€์ง€๊ฐ€ ๊ฐˆ๋ผ์ ธ ๋‚˜๊ฐ„ ํ•ญ๋ชฉ์„ node๋ผ๊ณ  ํ•˜๋ฉฐ, DOM ํŠธ๋ฆฌ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์ธ html ๋…ธ๋“œ๋ฅผ root node๋ผ๊ณ  ํ•œ๋‹ค.

 

DOM์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ์›์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ๋ชจ๋“  HTML ํƒœ๊ทธ๋Š” ์š”์†Œ(element) ๋…ธ๋“œ์ด๋‹ค.
2. HTML ํƒœ๊ทธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ…์ŠคํŠธ ๋‚ด์šฉ์€ ์ž์‹ ๋…ธ๋“œ์ธ ํ…์ŠคํŠธ ๋…ธ๋“œ์ด๋‹ค.
3. HTML ํƒœ๊ทธ์— ์žˆ๋Š” ์†์„ฑ์€ ์ž์‹ ๋…ธ๋“œ์ธ ์†์„ฑ(attribute) ๋…ธ๋“œ์ด๋‹ค.
4. ์ฃผ์„์€ ์ฃผ์„(comment) ๋…ธ๋“œ์ด๋‹ค.