# ๐ DOM
# ๐ง๐ผโ๐ DOM์ ์์์ผ ํ๋ ์ด์
โ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด html์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด? โ์นํ์ด์ง์ ๋ณด์ฌ์ง๋ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด? โ์ธํฐ๋ ํฐ๋ธํ ์น์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด?
๋จ์ํ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ ์นํ์ด์ง๊ฐ ์๋๋ผ, ๋์ ์ธ ๊ธฐ๋ฅ์ด ์๋ ์น์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด, ๋ฌธ์๋ฅผ ์กฐ์ํ ์ ์๊ฒ ํด์ฃผ๋ DOM์ ์์์ผ ํฉ๋๋ค.
# ๐๐ปโโ๏ธ ์ด ๋ฌธ์๋ฅผ ๋ณด๊ณ ๋๋ฉด
- DOM์ด ์ ํ์ํ์ง ๋งํ ์ ์๋ค.
- DOM์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ฉ์๋๋ฅผ 4๊ฐ์ง ์ด์ ์ ์ ์๋ค.
- DOM์ ๋ณ๊ฒฝ, ์กฐ์ํ๋ ๋ฉ์๋๋ฅผ ์ต์ 2๊ฐ์ง ์ฐพ๊ณ , ์ฌ์ฉํด ๋ณผ ์ ์๋ค.
# ๐ DOM : Document Object Model
์งํ์ฒ ์ญ์ ๋์ ์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๊ฐ์ด ์นํ์ด์ง ๋ฌธ์๋ฅผ ์กฐ์ํ๊ธฐ ์ํด์ ํ์์ ์ผ๋ก ์์์ผ ํ๋ ๊ฒ์ด DOM์
๋๋ค.
DOM์ Document Object Model์ ์ฝ์์ธ๋ฐ์. ๊ตฌ๊ธ์์ DOM์ ๋ํด์ ๊ฒ์ํด๋ณด๋ฉด ์๋์ ๊ฐ์ด ๋์ต๋๋ค.
๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ(Document Object Model)์ HTML, XML ๋ฌธ์์ ํ๋ก๊ทธ๋๋ฐ interface์ ๋๋ค. DOM์ ๋ฌธ์์ ๊ตฌ์กฐํ๋ ํํ(structured representation)์ ์ ๊ณตํ๋ฉฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ DOM ๊ตฌ์กฐ์ ์ ๊ทผ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ๋ฌธ์ ๊ตฌ์กฐ ๋ฐ ์คํ์ผ, ๋ด์ฉ ๋ฑ์ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋์์ค๋๋ค.
์์๊ฐ์ ์ ์๊ฐ ์ฒ์์๋ ์ ์๋ฟ์ง ์์ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ฏ์ ์ง์๋ ํฌ์ธํธ๋ฅผ ์ก๊ณ ๋ณด๋ฉด ํจ์ฌ ์ดํดํ๊ธฐ ์ฌ์์ง๋๋ฐ์. ์ด ์ ์์์ ์ฐ๋ฆฌ๊ฐ ์ฐ์ ์ ์ผ๋ก ์ฃผ๋ชฉํ ํฌ์ธํธ๊ฐ ์์ต๋๋ค.
DOM์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ DOM ๊ตฌ์กฐ์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌย
๋ฌธ์ ๊ตฌ์กฐ, ์คํ์ผ, ๋ด์ฉ ๋ฑ์ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋๋๋ค.
์ฆ DOM์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ๋ฌธ์์ ๊ตฌ์กฐ์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ณ , ๋ณ๊ฒฝํ ์ ์๊ฒ ํด์ค๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ฐ๋ฆฌ๊ฐ frontend์ ๋ํด ๊ฒ์์ ํ๋ค๊ณ ํด๋ด ์๋ค.
๊ฒ์ํ๊ณ ์ถ์ ํค์๋๋ฅผ ์ฒ๋ฆฌํด์ ์๋ฒ์ ์ ์ก์ ํด์ผํ ํ ๋ฐ์. html ๋ฌธ์์ ์๋ ๋ชจ๋ ๋ฌธ์์ด์์ ์ ํค์๋๋ฅผ ๊ฒ์ํด์ ๊ฐ์ ธ์ค๋ ค๋ฉด ๋ถํ์ํ ์์ ๋ค์ด ๋๋ฌด ๋ง์์ง ๊ฒ์ ๋๋ค. ํ ๋จ์ด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ๋ฌธ์ ์ ์ฒด๋ฅผ ์ค์บํด์ผ ํ๋๊น์. ์ค์ ๋ก ๊ฒ์์ฐฝ๋ง์ผ๋ก ๊ฐ๋จํ ui๋ฅผ ๊ฐ์ง ๊ตฌ๊ธ ๊ฒ์ํ๋ฉด์ ์๋์ฒ๋ผ ์๋ง์ html ํ๊ทธ๋ค๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.

ํ์ง๋ง DOM์ด ์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ DOM์ด ์ ๊ณตํ๋ API๋ฅผ ์ด์ฉํด์ ๊ฒ์์ด์ ํด๋นํ๋ ๋ฌธ์์ด์ ๋ณด๋ค ์ฝ๊ฒ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
# ๐ฅ๏ธ DOM API ์ฌ์ฉํ๊ธฐ
๊ฒ์์ด๋ฅผ ์ ๋ ฅ๋ฐ๋ DOM์ ์ ๊ทผํ๊ธฐ ์ํด ์๋ ๊ฒ์ input์ ํ๊ทธ ์์๋ฅผ ์ดํด๋ด ์๋ค.
<input id="search" class="search-input-style">
DOM API์๋ getElement ํน์ getElements๋ก ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฉ์๋๋ค์ด ์์ต๋๋ค.
์ด๋ฐ ๋ฉ์๋๋ฅผ ์ด์ฉํด ์ธ์๋ก ์๋ฆฌ๋จผํธ์ ๋ํ ์กฐ๊ฑด์ ์ ๋ฌํ๋ฉด ์กฐ๊ฑด์ ๋ถํฉํ๋ ํน์ ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐํํฉ๋๋ค.
getElement, querySelector๋ ์๋ฆฌ๋จผํธ๋ฅผ ํ ๊ฐ๋ง ๋ฐํํ๊ณ getElements, querySelectorAll๋ ์๋ฆฌ๋จผํธ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ฐํํฉ๋๋ค.
DOM ๊ฐ์ฒด๋ฅผ ์ฐพ๋ ํค์๋๋ ํฌ๊ฒ 4๊ฐ์ง ์ ๋๋ค.
<div class="mt-5 mb-6 font-jua">
<div class="d-inline-block mr-10 font-size-40">tag</div>
<div class="d-inline-block mr-10 font-size-40">id</div>
<div class="d-inline-block mr-10 font-size-40">class</div>
<div class="d-inline-block font-size-40">cssSelector</div>
</div>
# 1. tag๋ก ์ฐพ๊ธฐ
document.getElementsByTagName('input')
# 2. id๋ก ์ฐพ๊ธฐ
์๋๊ฐ ๊ฐ์ฅ ๋น ๋ฅธ ํน์ง์ ๊ฐ์ง
document.getElementById('search')
# 3. className์ผ๋ก ์ฐพ๊ธฐ
document.getElementsByClassName('search-input-style')
# 4. cssSelector๋ก ์ฐพ๊ธฐ
์ผ์นํ๋ ์ฒซ๋ฒ์งธ ์๋ฆฌ๋จผํธ
document.querySelector('.search-input-style')
์ผ์นํ๋ ๋ชจ๋ ์๋ฆฌ๋จผํธ
document.querySelectorAll('.search-input-style')
# ๐ ์ ๋ฆฌ
๊ทธ๋์ DOM์
HTML์ ์ํ API์ด๋ฉด์
HTML์ ํ์ํ ์ ์๊ณ
HTML์ ๊ตฌ์กฐ๋ฅผ ๋ฐ๊ฟ ์๋ ์์ต๋๋ค.
# ๐ ์ฐธ๊ณ ๋งํฌ
- MDN (opens new window)
- DOM์ด๋ ๋ฌด์์ธ๊ฐ (opens new window)
- DOM์ ์ ํํ ๋ฌด์์ผ๊น? (opens new window)
- Template literals (opens new window) - ES6์ Template Literals ๋ฌธ๋ฒ์ ๋ํ ๊ธ์ ๋๋ค. html template๊ณผ data๋ฅผ ๊ฒฐํฉํด์ ๋ง๋ค์ด ๋ด๋๋ฐ ์ ์ฉํ๋ ๊ผญ ์ฐธ๊ณ ํด์ฃผ์ธ์.