October 21, 2020
์ด์ Kotlin
์ผ๋ก ๊ฐ๋จํ ๋ก์คํธ์ํฌ ์ ์ ๊ฒ์ ์ฑ์ ๋ง๋ ๋ค, ์ทจ๋ฏธ? ๊ฐ๋
์ผ๋ก React
๋ฅผ ์จ์ ์กฐ๊ธ ๋ ๊ท๋ชจ์๊ฒ ์น ์ฑ์ ๋ง๋ค๊ณ ์๋ค. ๋ฌผ๋ก .. ๊ณต์์ ์ผ๋ก ์ ๊ณต๋๋ API๊ฐ ์๋๋ผ ์์ฑ๋ DOM์ ํ๋ํ๋ ๋ฏ์ด์ ์ ๋ณด๋ฅผ ์ถ์ถํ๊ณ ์๊ธฐ๋๋ฌธ์ ์๊ฐ์ ์ข ๊ฑธ๋ฆฌ๋๋ผ ใ
ใ
; ๊ทธ๋๋ ์ฌ๋ฏธ๋ ์์ผ๋ ๋คํ
๊ตฌ๊ธ๋ง ์ค React
์ ๊ด๋ จ์ด ๊น๋ค๋ Virtual DOM
์ด๋ผ๋ ์ฉ์ด๋ฅผ ๋ณด์๋๋ฐ, React
๋ฅผ ์ฌ์ฉํ๋๋ฐ๋ ํด๋น ์ฉ์ด๊ฐ ๋ฏ์ค์ด์ ์์๋ณด๊ธฐ๋ก ํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๋ฆฌ๋ View ํ๋ฉด์ ๊ตฌ์ฑํ ๋, HTML Elements๋ฑ์ ํ์ฉํ์ฌ ๊ตฌ์กฐ๋ฅผ ์ง๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ๊ทธ๊ฒ์ ์ฝ๊ณ ๋ ๋๋ง์ ํ๊ฒ๋๋ค.
document.getElementById('Hello').innerHTML = '์๋
' // ์ฒซ๋ฒ์งธ ๋ ๋๋ง
document.body.style.background = 'tomato' // ๋๋ฒ์งธ ๋ ๋๋ง
์ด๋ฐ์์ผ๋ก ์ฌ์ฉ์๊ฐ ์ด๋ ํ ์์ฒญ์ ํ์์ ๋, DOM
์ ์ง์ ์ ์ผ๋ก ๋ณํ๋ฅผ ์ค ์๋ค.
document.getElementById('Hello').innerHTML = '์๋
';
document.body.style.background = 'tomato';
document.getElementById('Hello').innerHTML = '์๋
ํ';
document.body.style.background = 'blue';
document.getElementById('Hello').innerHTML = '์๋
ํ์ธ';
document.body.style.background = 'yellow';
...
์ด๋ ๊ฒ 100๊ฐ์ ๋ณ๊ฒฝ์ด ์๋ค๊ณ ํ๋ฉด DOM
์ ๋ช๋ฒ ๋ ๋๋ง์ด ๋๋๊ฑธ๊น..?
Virtual DOM
์ด๋ DOM
์ ์ถ์ํํ ๊ฐ์์ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ง๋ค์ด๋๋๊ฒ์ด๋ค.
์์ฒ๋ผ ์ฌ์ฉ์์ ์ํด ๋ณ๊ฒฝ์ฌํญ์ด ์๋ค๋ฉด DOM
์ ์ง์ ์์ ํ๋๊ฒ์ด ์๋๋ผ ์ค๊ฐ๋จ๊ณ๋ก Virtual DOM
์ ์์ ํ๊ณ , Virtual DOM
์์ ๊ธฐ์กด์ ๊ฐ๊ณผ ๋ณ๊ฒฝ๋ ๊ฐ์ ๊ฐ์งํ์ฌ ํ์ํ ๋ถ๋ถ๋ง ๋ณ๊ฒฝ์ ์ํจ๋ค.
์ด ๋, React
๋ ์
๋ฐ์ดํธ๋ฅผ ํ ๋, ๋
ธ๋๊ฐ์ ์์ฑ ๋น๊ต ๋ฑ์ผ๋ก ๊ตฌ๋ถ์ ํ๋๋ฐ, map
๊ณผ ๊ฐ์ ๋ฉ์๋๋ก ๋น์ทํ ๊ตฌ์กฐ์ ๋
ธ๋๊ฐ ์ฌ๋ฌ๊ฐ ์์ฑ๋ ๊ฒฝ์ฐ ๊ณ ์ ํ ๊ฐ์ key
๋ก ํ์ฌ ๊ตฌ๋ถ์ง๋๋ค.
์์ฑ๋๋ DOM
๋
ธ๋๋ค์ ๋ณํ๊ฐ ์์ด ์ ์ ์ด๋ผ๋ฉด map
์์ ์ ๊ณตํ๋ index
๋ฅผ ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํ์ง๋ง, ๋ณํ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ id
๊ฐ์ ๊ณ ์ ํ ๊ฐ์ ์ฌ์ฉํด์ฃผ์ด์ผ ํ๋ค.
์์ ๋ฅผ ์ดํด๋ณด๋,
input text
์ ๊ฐ์ ๋ ธ๋๋ค์index
๊ฐ ๋ฐ๋๋ ์ ๋ ฅํ ๊ฐ๋ค์ ์ด๋๋์ง ์๊ณ ์๋๋ก ๋๋ฝ๋๋? ์๋ฌ๊ฐ ๋ฐ์ํ์
์ด์ฉ๋ , Virtual DOM
์ SPA
ํน์ฑ์ DOM
์ ๋ ๋๋ง์ด ์ง์์ ์ผ๋ก ์์ฃผ ๋ฐ์ํ๋์ ์ ๋ํด reflow
๊ฐ ์ฌ๋ฌ๋ฒ, ๋ง์ด, ๋ชจ๋ ๋
ธ๋์ ๋ฐ์ํ๋ ์ฑ๋ฅ์์ ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด, ํ์ํ๋ถ๋ถ๋ง, ๋ณํ๋ฅผ ๋ชจ์์ ์ผ๊ด์ฒ๋ฆฌํด์ฃผ์ด ์ฑ๋ฅ๊ฐ์ ์ ๋์์ ์ค๋ค๊ณ ํ๋ค.