Vanilla Javascript๋ก ์น ์ปดํฌ๋ํธ ๋ง๋ค๊ธฐ | ๊ฐ๋ฐ์ ํฉ์ค์ผ
์ ๊ธ์ ์ฝ๋ค๊ฐ ํ ๊ฐ์ง ์๋ฌธ์ด ์๊ฒผ๋ค.
์ด์ ๋ ์ง์ ์ ์ผ๋ก DOM์ ๋ค๋ฃจ๋ ํ์๊ฐ ๊ธ๊ฒฉํ๊ฒ ๊ฐ์ํ๊ณ , ์ํ(State) ๋ฅผ ๊ธฐ์ค์ผ๋ก DOM์ ๋ ๋๋ง ํ๋ ํํ๋ก ๋ฐ์ ํ ๊ฒ์ด๋ค. DOM์ด ๋ณํ๋ ๊ฒฝ์ฐ๊ฐ State์ ์ข ์ ๋์ด๋ฒ๋ฆฐ ๊ฒ์ด๋ค. ๋ฐ๋๋ก ๋งํ๋ฉด, State๊ฐ ๋ณํ์ง ์์ ๊ฒฝ์ฐ DOM์ด ๋ณํ๋ฉด ์ ๋๋ ๊ฒ์ด๋ค.
์ด ๊ธ์ DOM ์์์ ์ง์ ์ ๊ทผํ๋ ๊ฒ๊ณผ state์ ๋ฐ๋ผ DOM์ ๋ ๋๋งํ๋ ๊ฒ์ ์๋ก ๋์ฒ์ ์ ์๋ ๋ฐ๋ ๊ฐ๋ ์ผ๋ก ์๊ฐํ๊ณ ์๋ค. ๋ ์ด ๋ ๊ฐ์ง๊ฐ ์ด์งธ์ ๋ฐ๋ ๊ฐ๋ ์ด ๋๋ ๊ฒ์ธ์ง ์ดํด๊ฐ ์ ๋์ง ์์๋ค. state์ ๋ฐ๋ผ DOM์ ๋ ๋๋งํ๋ ์๋ ์ฝ๋์์๋, innerHTML API๋ฅผ ์ฌ์ฉํด DOM์ ์ ๊ทผํ์ง ์๋?
์ด ์๋ฌธ์ ํด๊ฒฐํ๊ธฐ ์ํด, DOM์ ์ง์ ์ ๊ทผํ๋ค ๋ ๋ง์ ์๋ฏธ์ ๋ํด ์ข ๋ ์์ธํ ์์๋ณด๊ฒ ๋์๋ค.
๐ “DOM์ ์ง์ ์ ๊ทผํ๋ค”์ ์๋ฏธ
์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด์ ์น๊ฐ๋ฐ์ด ์ด๋ค ํ๋ฆ์ผ๋ก ๋ฐ์ ํด์๋์ง๋ฅผ ์ดํดํ ํ์๊ฐ ์๋ค.
์ฐ์ ์ง๊ณ ๊ฐ์. ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชฉ์ ์, ์ ์ ์ธ HTML ๋ฌธ์๋ฅผ ์กฐ์ํด ๋ํํ ์น(interactive web)์ ๋ง๋๋ ๊ฒ์ด๋ค. ์ด๋ ์๋ ์ง๊ธ์ด๋ ๋ณ์น์๋ ๋์ ์ ์ด๋ค.
์ ๋ชฉ์ ์ ์ํ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ๋ฐฉ๋ฒ์ ๋ฐ๋ก DOM API๋ฅผ ํ์ฉํ๋ ๊ฒ์ด๋ค. DOM API๋ ๋ง๊ทธ๋๋ก DOM ์์๋ฅผ ์กฐ์ํ ์ ์๋ API์ด๋ค. getElementById
, innerHTML
, ์๋ก์ด ๋
ธ๋๋ฅผ ์ถ๊ฐํ ์ ์๋ appendChild
, ์์ฑํ ์ ์๋ createElement
๋ฑ์ด DOM API์ ํด๋นํ๋ค. ํ ๋ ๋๋ฆฌ ์ฌ์ฉ๋์๋ JQuery๋ ์ด๋ฌํ DOM ์กฐ์์ ํธ๋ฆฌํ๊ฒ ํ ์ ์๋๋ก ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
โ JQuery์ ์ํ ๊ด๋ฆฌ ๋ฐฉ์
JQuery๋ฅผ ํ๋๋ก ํ DOM ์ ์ด ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
Element A,B,C๋ ๊ฐ DOM ์์๋ฅผ ์๋ฏธํ๊ณ , DOM ์์์ data
์์ฑ๊ฐ์ผ๋ก ์ํ๊ฐ ์ ์ฅ๋์ด ์๋ค.
์ํ๊ด๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ผ๋ก ์ด๋ค์ง๋ค.
- ๋ณ๊ฒฝ์ด ํ์ํ DOM์ ์ ํํ๋ค.
- ์ ํํ DOM์ผ๋ก๋ถํฐ ์ํ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ๋ก์ง์ ์ฒ๋ฆฌํ ๋ค์ ์๋ก์ด ์ํ๋ก ์
๋ฐ์ดํธ ํ๋ค.
์ฆ DOM์ด ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ฐ๋ฆฐ DOM ์์๊ฐ ๊ฐ์ง ์ํ๊ฐ์ ์์กดํ๊ฒ ๋๋ค.
โ JQuery ์ํ ๊ด๋ฆฌ ๋ฐฉ์์ ๋ฌธ์ ์
DOM์ด ๊ฐ์ง ์ํ ๋ฐ์ดํฐ์ ์์กดํ๋ ๊ฑด ์ด๋ค ๋ฌธ์ ์ ์ด ์์๊น? ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ ์ํฉ์ ๊ฐ์ ํด๋ณด์.
์ด ์ํฉ์์ API๋ฅผ ํธ์ถํ๋ ๋์ค์ Element A์ ์ํ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น? Element B๋ ์๋ชป๋ ๊ฐ์ผ๋ก ์
๋ฐ์ดํธ ๋ ๊ฒ์ด๋ค. ๊ฐ๋ณ DOM ์์๊ฐ ์ํ๊ฐ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์ด๋ฅผ ๊ฐ์งํ ์ ์๋ค. ์นํ์ด์ง๊ฐ ๋ณต์กํด์ง๊ณ UI๊ฐ ๋ง์์ง์๋ก ์ด๋ ์ง์ ์์ ์ด๋ ์์ ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋์๋์ง๋ฅผ ์ถ์ ํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋ค. ์ด๋ ์ค๋ฅ๋ฅผ ๋ณ๋๋ค.
JQuery ์ํ๊ด๋ฆฌ ๋ฐฉ์์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด ๋ฐ๋ก state์ ๋ฐ๋ผ DOM์ ๋ ๋๋งํ๋ ๋ฐฉ์์ด๋ค. ์ํ๊ด๋ฆฌ์ ์ฃผ๋๊ถ์ DOM์ผ๋ก๋ถํฐ ๋นผ์์์ค๋ ๊ฒ์ด๋ค.
โ DOM ์ ์ด ๋ฐฉ์ ์ ๋ฆฌ
state์ ๋ฐ๋ผ DOM์ ๋ ๋๋งํ๋ ๋ฐฉ์(=์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ฐ๋ฐ)์ ๋ฐ๋ ๊ฐ๋ ์ผ๋ก์์ DOM ์ ์ด ๋ฐฉ์์, ๋จ์ํ “DOM API๋ฅผ ์ฌ์ฉํด DOM์ ์กฐ์ํ๋ ๊ฒ”๋ง์ ์๋ฏธํ์ง ์๋๋ค. DOM ์์๊ฐ ์ํ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , DOM API๋ฅผ ์ด์ฉํด DOM ์์๋ก๋ถํฐ ์ํ๊ฐ์ ๊ฐ์ ธ์ค๊ณ , ์ํ๊ฐ์ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
๐ ์ปดํฌ๋ํธ
๊ทธ๋ผ ์ด์ DOM ์ ์ด ๋ฐฉ์์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ฐ๋ฐ ๋ฐฉ์์ ์ดํด๋ณด์. ์ปดํฌ๋ํธ๋ ํฌ๊ฒ ์ธ ๊ฐ์ง ์์๋ฅผ ๊ฐ์ง๋ค.
- state: ์ํ๊ฐ ์ฌ๋ฌ DOM ์์์ ๋ถ์ฐ๋์ด ์์ง ์๊ณ , state๋ผ๋ ๋ณ์๋ก ๊ด๋ฆฌ๋๋ค.
- setState: ์ํ์ ๋ณ๊ฒฝ์ setState๋ฅผ ํตํด์๋ง ์ด๋ค์ง๋ค. ์ํ๊ฐ ๋ณ๊ฒฝ๋ ์ง์ ๊ณผ ์์ ์ด ๋ช ํํด์ง๋ค.
- render: state์ ๋ง๊ฒ DOM์ ๋ ๋๋งํ๋ค. DOM์ ์ด์ ์ํ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค. ๊ทธ์ state๋ฅผ ๋ฐ์ํด UI๋ฅผ ๊ทธ๋ฆฌ๋ ์ญํ ์ ํ ๋ฟ์ด๋ค.
๐ ์ด์ DOM์ ๋ชจ๋ ์ฃผ๋๊ถ์ ๋นผ์๊ฒผ๋ค! ๐
์๋๋ ํฉ์ค์ผ๋ ๋ธ๋ก๊ทธ์์ ๊ฐ์ ธ์จ ์ปดํฌ๋ํธ ์ค๊ณ์ ๊ธฐ๋ฐ์ด ๋๋ ์ฝ๋์ด๋ค.
์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ๋ถ๋ถ์ ์ดํด๋ณด์. DOM ์์(button ํ๊ทธ)์ ์ด๋ฒคํธ๋ฆฌ์ค๋๋ฅผ ๋ถ์ด๊ณ , ์ฌ์ฉ์๊ฐ UI(DOM ์์)๋ฅผ ํด๋ฆญํ๋ฉด setState
ํจ์๋ฅผ ํตํด ์ํ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ค. ์ํ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ํ, render
ํจ์๋ฅผ ํตํด ์๋ก์ด ์ํ๊ฐ ๋ฐ์๋ DOM์ด ๋ ๋๋ง๋๋ค. DOM์ ์ํ ๋ณ๊ฒฝ์ ์ง์ ์ ์ผ๋ก ๊ด์ฌํ๋ ๋ฐ๊ฐ ์๋ค. ๋ render
ํจ์์ setEvent
ํจ์๋ฅผ ์ ์ธํ๊ณ ๋, ๊ฐ๋ณ DOM ์์์ ์ ๊ทผํ๋ ์ผ๋ ์๋ค.
๐๐ป ๋ง๋ฌด๋ฆฌ
์ฌ์ค ํ๋ก๊ทธ๋๋จธ์ค ๊ณผ์ ๊ด ํด์ค์ ๋ณผ ๋๋ ๋น์ทํ ๊ถ๊ธ์ฆ์ ๊ฐ์ก์๋ค.
DOM ์ ๊ทผ์ ์ต์ํํ๋ ๊ฒ๊ณผ ์ปดํฌ๋ํธ ํํ๋ก ์ถ์ํํ๋ ๊ฒ ๋์ฒด ๋ฌด์จ ์๊ด์ด์ง? DOM ์ ๊ทผ์ ์ต์ํํ๋ค๋ ๊ฑด ๋ ๋ญ์ผ?
์ด ์ง์ ์ ๋๋์ด ์ดํดํด๋๋ค.
๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๋ฆฌ์กํธ๋ก ๊ฐ๋ฐ์ ์ ๋ฌธํ ์ฌ๋์ผ๋ก์, ๋ด๊ฒ ์ปดํฌ๋ํธ ๋จ์๋ก ๊ฐ๋ฐํ๋ ๋ฐฉ์์ด ์์ฐ์ค๋ฝ๊ณ ๋น์ฐํ๋ค. ํด๋น ๋ฐฉ์์ ์กด์ฌ ์ด์ ์ ๋ชฉ์ ์ ๋ํด ๊ณ ๋ฏผ ํด๋ณธ ์ ์ด ์์๋ค. ์ปดํฌ๋ํธ ๋ฑ์ฅ ์ด์ ์ ์ํ๊ด๋ฆฌ ๋ฐฉ์๊ณผ JQuery๋ฅผ ์ดํด๋ด์ผ๋ก์จ, ์ปดํฌ๋ํธ์ ๋ณธ์ง์ ๋ํด ๋ณด๋ค ์ ์ดํดํ๊ฒ ๋์๋ค.
์ด๋ฒ ๊ธ์ ์์ฑํ๋ฉด์ ๋ด๊ฐ ์ดํดํ ์ปดํฌ๋ํธ์ ๋ณธ์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๊ธฐ์กด์ DOM ์์์ ์ ์ฅ๋์ด ์๋ ์ํ๋ฅผ, ์ปดํฌ๋ํธ ๋ด์ state๋ผ๋ ๋ณ์๋ก ๊ด๋ฆฌํ๋ค.
- state์ ๋ฐ๋ผ UI๋ฅผ ๋ ๋๋งํ๋ค. UI๋ state์ ๋ณ๊ฒฝ์ ์ํด์๋ง ๋ณ๊ฒฝ๋๋ค.
- state๋ setState ํจ์๋ฅผ ํตํด์๋ง ๋ณ๊ฒฝ๋๋ค.
์ ๋ฆฌํ์๋ฉด ์ปดํฌ๋ํธ๋ ์ํ๊ฐ์ state๋ผ๋ ๋ณ์๋ก ๊ด๋ฆฌํจ์ผ๋ก์จ, UI์ ์์ธก ๊ฐ๋ฅํ ๋ณ๊ฒฝ์ ๋ณด์ฅํ๋ค.
Reference
Vanilla Javascript๋ก ์น ์ปดํฌ๋ํธ ๋ง๋ค๊ธฐ | ๊ฐ๋ฐ์ ํฉ์ค์ผ
TECH CONCERT: FRONT END 2019 - ๋ฐ์ดํฐ ์ํ ๊ด๋ฆฌ. ๊ทธ๊ฒ์ ์๋ ค์ฃผ๋ง
'Vanilla JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Vanilla Javascript๋ก SPA ๊ตฌํํ๊ธฐ(ํ๋ก๊ทธ๋๋จธ์ค ์ผํ๋ชฐ SPA) (0) | 2022.11.11 |
---|---|
๊ฐ์ฒด ํ๋กํผํฐ์ ์ ๊ทผํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฐจ์ด์ (0) | 2022.09.11 |
this ํค์๋ (0) | 2022.08.19 |
๋ด ์ฝ๋๊ฐ ์ฐ์ํ์ง ์์ ์ด์ (0) | 2022.08.17 |
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ํจ์๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ ๋ ๊ฐ์ง (0) | 2022.08.17 |