๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ DOM ์กฐ์ ์ฐ์ต์ ๋๋ค. document.querySelector(), addEventListener, element.classList.add() ๋ฑ์ ๊ธฐ๋ณธ API์ ์ต์ํด์ง๋ ๊ฒ์ด ๋ชฉํ์ ๋๋ค.
์๊ตฌ์ฌํญ
- ๋ชฉ๋ก ์ถ๊ฐ: ์ ๋ ฅ ํ๋์ ํ ์คํธ๋ฅผ ์ ๋ ฅํ๊ณ '์ถ๊ฐ' ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ชฉ๋ก์ ์๋ก์ด ํญ๋ชฉ์ด ์ถ๊ฐ๋์ด์ผ ํฉ๋๋ค.
- ํญ๋ชฉ ์๋ฃ: ๋ชฉ๋ก ํญ๋ชฉ์ ํด๋ฆญํ๋ฉด complete ์ํ๋ก ํ ๊ธ๋๋ฉฐ, ํ ์คํธ์ ์ทจ์์ ์ด ์๊ฒจ์ผ ํฉ๋๋ค.
- ํญ๋ชฉ ์ญ์ : ๊ฐ ํญ๋ชฉ ์์ 'X' ๋ฒํผ์ ์ถ๊ฐํ๊ณ , ํด๋ฆญ ์ ํด๋น ํญ๋ชฉ์ด ๋ฆฌ์คํธ์์ ์ ๊ฑฐ๋์ด์ผ ํฉ๋๋ค.
๐ ์ ์ฉ ๊ฐ์ด๋
- ์คํฌ๋ฆฝํธ: jQuery ๋์ ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ(ES6) ๋ฌธ๋ฒ๋ง ์ฌ์ฉํ์ฌ ๊ตฌํํ์ธ์.
- HTML/CSS:
- BEM: todo-app, todo-app__input-group, todo-item, todo-item__text, todo-item--completed ๋ฑ์ผ๋ก ๊ตฌ์กฐ๋ฅผ ๋ช ํํ ๋ถ๋ฆฌํด ๋ณด์ธ์.
- ๋ถํธ์คํธ๋ฉ/SCSS: ๋ถํธ์คํธ๋ฉ ํด๋์ค(์: form-control, btn, list-group)๋ฅผ ํ์ฉํ์ฌ ๋งํฌ์ ์ ๊ตฌ์ฑํ์ ๋ ์ข์ต๋๋ค.
- ์คํ์ผ ๊ฐ์ด๋:
- ๋ณ์ ์ ์ธ ์ **const์ let**์ ์ํฉ์ ๋ง๊ฒ ์ฌ์ฉํ์ธ์.
- ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฑ์์ **ํ์ดํ ํจ์(Arrow Function)**๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํด ๋ณด์ธ์.
๐ก ๋ค์ ๋จ๊ณ๋ฅผ ์ํ ํํธ
- ์๋ก์ด HTML ์์๋ฅผ ์์ฑํ ๋๋ **document.createElement()**๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ์ญ์ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋, ์ด๋ฒคํธ ์์(Event Delegation)์ ์ฌ์ฉํ๋ฉด ํจ์จ์ ์ ๋๋ค. (์ ํ ์ฌํญ์ด์ง๋ง, ๋์ ํด ๋ณด์ธ์!)+
