VanillaJS ์คํฐ๋, 2์ฃผ์ฐจ์ ํ๊ณ ๋ก
1์ฃผ์ฐจ ๐ง
ํ ๋ง๋ค๊ธฐ์ ์์ด์ค ๋ธ๋ ์ดํน์ ์งํํ๋ฉด์ ๋ณธ๊ฒฉ์ ์ธ 1์ฃผ์ฐจ ๋ฏธ์ ์ด ์์๋๋ค.
๋๋ ์ฌ์ค ๋ธ๋์ปคํผ ์ฝ๋๋ฆฌ๋ทฐ ์คํฐ๋๋ ์ฒ์์ด ์๋๋ค. ์ฝ 1๋ ์ ์ 5๊ธฐ์ ์ฐธ์ฌํ์๋๋ฐ ๊ทธ๋๋ ์ข์์ง๋ง ์ง๊ธ์ ์ ๋ฐ๋ฏธ ๊ฐ์์ ์จ๋ผ์ธ ์ธ์ ์ ํ๋ฆฌํฐ๊ฐ ๋น๊ต ๋ถ๊ฐ์ ๋๋ก ์ข์์ง๋ฉฐ ๋ง์กฑ์ค๋ฌ์ด ์ฝ๋๋ฆฌ๋ทฐ์ ์ธ์ฌ์ดํธ๊ฐ ๊ฐ๋ฅํด ์ง ๊ฒ ๊ฐ๋ค. ์ค๋งํธํ ์คํฐ๋์ ์์ฑ๋ณธ๊ฐ๋ค๊ณ ํ ๊น?
ํนํ ๋ฉํ๋ฒ์ค์ notion์ ํตํ ์ธ์ ์งํ ๋ฐฉ์์ ์ ๋ง ์๋ฌ๋๋ค.
์ฐ๋ฆฌ ํ์ 2์ฃผ์ฐจ ์จ๋ผ์ธ ์ธ์ ์ด ์์๋๊ธฐ ์ ์์ฒด ์ฝ๋ ๋ฆฌํฉํ ๋ง์ ์งํํ๊ธฐ๋ก ํ๋ค. ์ด๋ฅผ ์ํด Github Organization์ ๋ฐ๋ก ๋ง๋ค์ด PR์ ์งํํ๋ค. ์คํฐ๋ ์ ์ฅ์์์ fork๋ก ๊ฐ์ ธ์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก commit log๋ฅผ ์ ์งํ๋ฉฐ 2๊ฐ์ง remote repo์ ๋์ ๋ฐ์์ด ๊ฐ๋ฅํ ์ค ์์๋๋ฐ.. ์ ์ฅ์๋ฅผ ์๋ก ์์ฑํ๋ฉด์ ์๋ณธ repo์ head ๊ฐ ๋ฌ๋ผ์ ธ ๊ณ์ ์ค๋ฅ๊ฐ ๋ฌ๋ค. ์๊ฐ๋งํผ ์ฝ์ง๊ฐ ์์๋ค..! (1์ฃผ์ฐจ๋ Github์ ์ ์ํ๋ ์๊ฐ์ด์๋ค๊ณ ํด๋ ๊ณผ์ธ์ด ์๋๋ค. ์ค์ ์ฝ๋ ๊ตฌํ ์๊ฐ์ ์ผ๋ง ๊ฑธ๋ฆฌ์ง ์์๋ค.)
โ๏ธ 2๊ฐ์ง repo์ ๋์ผ ์ปค๋ฐ ๋ก๊ทธ๋ฅผ ์ ์งํ ์ฑ ๋ค๋ฅธ ์๊ฒฉ ๋ธ๋์น์ ๋์ ๋ฐ์ํ๋ ๋ฒ
- git remote add {์ ์ฅ์์ฃผ์} {๋ธ๋์น๋ช }
- git remote -vrealhee {์ฝ๋๋ฆฌ๋ทฐ์ฉ์ผ๋ก ๋ถ๋ฆฌํ ์ ์ฅ์๋ช }
- ex - origin {์๋ณธ ์ ์ฅ์๋ช }
origin <https://github.com/blackcoffee-study/moonbucks-menu.git> (fetch)
origin <https://github.com/blackcoffee-study/moonbucks-menu.git> (push)
realhee <https://github.com/no-back/moonbucks-code-review.git> (fetch)
realhee <https://github.com/no-back/moonbucks-code-review.git> (push)
- git add → git commit → git push {remote์ด๋ฆ} {๋ธ๋์น๋ช }git push realhee realhee
- ex - git push origin realhee
ํนํ ์ฃผ๋ง๋์ ์ด๋ฃจ์ด์ง ์ฝ๋ ๋ฆฌ๋ทฐ ์๊ฐ์ด ๊ต์ฅํ ์ ์ตํ๋๋ฐ ํ์๋ค์ ์ ๋ง๋์์ธ์ง PR review ์ฝ๋ฉํธ๋ค์์ ์๊ฐํ์ง ๋ชปํ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์์๋ค. ์ด ๊ฒฝํ์ด ์ด์ฐ๋ ์์คํ๋์ง.. ํผ์ ๊ณต๋ถํ๋ ๊ฒ์ด๋์ ํ์คํ ๋ค๋ฅธ ๋๊ธฐ๋ถ์ฌ๊ฐ ๋๋ ๊ฒ์ ๋๊ผ๋ค.
๊ธฐ์ต์ ๋จ๋ ๋ด์ฉ์ UX์ ๊ด์ ๊ธฐ๋ฅ ์ค๊ณ์ ๋ํด ๋๋ ํ์๋ค๊ณผ์ ํ ๋ก ์ด๋ค. ํ๋ก ํธ์๋ ๊ฐ๋ฐ ์ data ์ฒ๋ฆฌ์ ๋ํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ฉด์ ์ฐธ๊ณผ ๊ฑฐ์ง์ด ๋๋ ์ง๊ฒ ๋๋ค. ๊ทธ๋ก์จ UX์ ์ธ ์ ํ์ ์ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ ๊ฐ๋ค. ๊ณต๋ฐฑ๊ฐ ์ ์ด๋ผ๋ ์ฃผ์ ๋ก ํ์๋ถ๋ค๊ณผ ๋๋ ๋ํ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก์ ๋ฐ๊ฑฐ๋ฆ์ด ๋ ๊ฒ ๊ฐ๋ค.
Point #3 ๊นจ๋ฌ์ ๊ฒ
- ๋์ ์ด๋ฒคํธ ํ ๋น์ ์ํ ์ด๋ฒคํธ ์์ (event delegation)
- ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด ๋ฌธ๋ฒ (ES6 : Template Literal)
- raw content๋ฅผ ๋ค๋ฃฐ ๋ ์ ๋งํ๋ฉด ์ฑ๋ฅ๊ณผ ๋ณด์์ด ๋ฐ์ด๋ textContent๋ฅผ ์จ๋ผ. (textContent > innerText > innerHTML)
- append(DOM, String, ๋ฐฐ์ด) vs. appendChild(only DOM)
- ES6์์ Document: keypress ์ด๋ฒคํธ๋ deprecated ๋๋ฉด์ ์ฌ์ฉ์ ์ง์ํ๋ค - MDN
2์ฃผ์ฐจ ๐
2์ฃผ์ฐจ ๋ฏธ์ ์ด ์์๋๋ค. ์จ๋ผ์ธ ์ธ์ ์์๋ ํ ๋ณ ์ฝ๋ ๋ฆฌํฉํ ๋ง๊ณผ ํ์ด ํ๋ก๊ทธ๋๋ฐ(!!)์ด ์งํ๋๋ค
- localStorage CRUD ๊ธฐ๋ฅ
- ์นดํ ๊ณ ๋ฆฌ ๋ณ ๋ฉ๋ดํ ๊ด๋ฆฌ
- ํ์ ๋ฒํผ ๊ธฐ๋ฅ ์ถ๊ฐ
ํนํ ์นดํ ๊ณ ๋ฆฌ ๋ณ ๋ฉ๋ดํ ๊ด๋ฆฌ๋ฅผ ์ํด์๋ ๋ฒํผ ํด๋ฆญ ์๋ง๋ค menuItems ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝ์์ผ์ผํ๊ธฐ ๋๋ฌธ์ setState, render ํจ์๋ฅผ ํตํ ์ํ๊ด๋ฆฌ๋ฅผ ์ ์ฉํด๋ณด๊ฒ ๋๋ค.
๊ฐ์ฅ ์ฒ์ ์ด๋ค ๋ณ์๋ฅผ state๋ก ๋ง๋ค์ง ๊ณ ๋ฏผ์ค๋ฌ์ ๋ค. setState, render ํจ์๋ฅผ ์ด๋ ์์ , ์ด๋ค ๊ณณ์ ๋ฐฐ์นํด์ผํ ์ง ์๊ฐํด๋ณด๋ฉด์ ์ฝ๋๋ฅผ ๊ณ ์ณ๋ณด๊ณ ์๋ณตํ๊ณ .. (๊ฒฐ๋ก : ๋ณธ๋ ์ํ๋ณ๊ฒฝ์ ์ด๋์๋ ๊ฐ๋ฅํ์ง๋ง ๋ถ๋ชจ์๊ฒ ๊ถํ์ ๋ถ์ฌํด ๋ถํํ๋ ํ์์ผ๋ก ๊ฐ๋ณ์ฑ์ ์ต์ํํ๋ค!) ๊ทธ๋ ๊ฒ ๋ณ ๋ค๋ฅธ ์ฝ๋ ์์ฑ ์์ด 2์ผ์ด ์ง๋๋ฒ๋ ธ๋ค..
์ธํฐ๋ท์ ์ํ ๊ด๋ฆฌ ๊ด๋ จ ํฌ์คํ ๋ค๊ณผ ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋๋ผ๋ ์๊ฐ๋๋ก ์ฝ๋์ ์ ์ฉ์ด ์๋๋ ์ดํด๊ฐ ๋์ง ์์๋ค. ๊ทธ๋ฌ๋ ์ค ์ด๋ฒ์ ํ์ฌ ์ ์ฌ์๊ฐ์ ์์ ์ ๋ค๋ฌ makerjun๋์ด ๋ธ๋ก๊ทธ์ ์ฌ๋ ค ๋์ผ์ ํ๋ก ํธ์๋ ์ถ์ฒ ๋์๋ค์ ๋ช ๊ถ ๊ตฌ๋งคํ๋๋ฐ, YOU DON'T KNOW JS๋ฅผ ์ฝ์๋ง์ ๊ณง๋ฐ๋ก ์ ๋ ์นด๋ฅผ ์ธ์ณค๋ค..! โจ
๋ถ๋๋ฌ์ด ๊ณ ๋ฐฑ์ด์ง๋ง ์ค๋ฌด์ ๋ค์ด์จ ์ง 4๋ ์ด ์ง๋ฌ์ง๋ง ๋ํ ์ ๊ณต ์์ ์ดํ ํ๋ก๊ทธ๋๋ฐ ๊ด๋ จ ์์ ์ ๋์ ์ฃผ๊ณ ๊ตฌ๋งคํ ์ ์ด ์์๋ค. ๋น ๋ฅด๊ฒ ๋ณํํ๋ ๊ธฐ์ ์คํ ์ฌ์ด์์ ๋ฌธ์๋ก ๋ ์ฑ ์ oldํ๋ค๊ณ ์๊ฐํ๋ค. ํนํ ์ฌ๋๋ฉด ์๋ ํ์ง ๋ชปํ ๊ฒ๋ง ๊ฐ์ ๋ถ๋ด๊ฐ๊ณผ ๋จผ์ง ์์ธ ์ฑ ๋ค์ด ์ฃผ๋ง๋ฑ์ฒ๋ผ ์ค์ณ์ง๋๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์ด๊ฒ ์ฌ๊ฑธ? ๋ด๊ฐ ๊ถ๊ธํ ์ฑํฐ๋ง ๋ช ์ค ์ฝ์๋๋ฐ๋ ์ํ ๊ด๋ฆฌ์ this, ์ค์ฝํ, ํธ์ด์คํ ์ ๋ํ ๊ถ๊ธ์ฆ์ด ๋ฐ๋ก ํด๊ฒฐ๋์๋ค. ๊ทธ๋ ๊ฒ ๋จธ๋ฆฌ๊ฐ ์กฐ๊ธ์ฉ ์ ๋ฆฌ๊ฐ ๋์ด๊ฐ๊ณ ์ฝ๋ ์์ฑ์๋ ๊ฐ์๋๊ฐ ๋ถ์๋ค.
ํํ ๋ฆฌ์ผ์ ์ฝ์ ๋ ๋ด๊ฐ ์๊ณ ์ถ์ ๊ฒ์ด ๋ญ์ง ๋ชฉ์ฐจ๋ฅผ ํตํด ํฐ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ฅด๋ ๊ฑธ ์์๋ด๊ฒ ๋ค๋ ์๊ฐ์ผ๋ก ์ฝ์ด์ผ ํจ์จ์ ์ผ๋ก ์ฝ์ ์ ์๋ค. ๋ค์ ์์ฑํ ํ๋ก๊ทธ๋จ์ ์ผ๋์ ๋๋ผ๋ ๊ฒ์ด๋ค. ์ด๋ฅผ '์ ๊ทน์ ์ฝ๊ธฐ'๋ผ๊ณ ํ๋ค. - ํจ๊ป ์๋ผ๊ธฐ
์ฃผ๋ก ์ฌ์ฉํ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์คํ ์์ค์ฝ๋๋ฅผ ์ฝ์ด๋ผ.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉํ๋ ์ฃผ์ ํค์๋์ ๋ง๋ญ์น๋ฅผ ํ์ ํ ์ ์๋ค - ํจ๊ป ์๋ผ๊ธฐ
Point #1 VanillaJS ์ํ ๊ด๋ฆฌ
์ฒ์์ App ํธ์ถ๋ถ๋ฅผ ๊ธฐ์ค์ผ๋ก this.menuItems๋ฅผ ์ํ ๋ณ์๋ก ๋ง๋ค์ด ์ ์ฉํ๋ ค๊ณ ํ๋๋ฐ ์๊ฐ๋งํผ ์ฝ์ง๊ฐ ์์๋ค.. ์๊ณ ๋ณด๋ ๊ธฐ์กด ์ฝ๋์์ function App() {..} ๋ก ํจ์ ์ ์ธ๋ฌธ ํํ๋ก ํจ์๋ฅผ ๋ง๋ค๊ณ App() ์ ํตํด ๊ณง๋ฐ๋ก ํธ์ถํ๋ค๋ณด๋ ํจ์ ํธ์ถ๋ถ ๊ฐ์ฒด๊ฐ ์์ด this๊ฐ undefined์๋ ๊ฒ์ด๋ค..!
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด this ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ๋ ค function์ const์ ํ์ดํ ํจ์ ํํ๋ก ๋ง๋ค๊ณ , Constructor๋ฅผ ํตํด App์ ์์ฑํ๊ณ ๋ณ์์ ํ ๋นํด ๊ทธ ๋ณ์๊ฐ init ํจ์๋ฅผ ํธ์ถํ๋ ํํ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. ํจ์ ์ ์ธ๋ฌธ ํํ์ ๋ฐ๋ฅธ ์ค์ฝํ, ํธ์ด์คํ ๊ฐ๋ ์ ๊ธฐ์ด๊ฐ ๋ถ์กฑํด ํค๋งธ๋ ๋ถ๋ถ์ด์๋ค.
โ๏ธํจ์์ 4๊ฐ์ง ์ ์ ๋ฐฉ์, ๊ทธ๋ฆฌ๊ณ ํธ์ด์คํ
function ํค์๋๋ก ์ ์ธํ ๋ชจ๋ ์๋ณ์๋ ํธ์ด์คํ ์ด ๋๋ค. ํจ์๊ฐ ์ ์๋๋ ๋ฐฉ์์ ๋ค ๊ฐ์ง๊ฐ ์๋ค.
//1. ํจ์ ์ ์ธ๋ฌธ : ํจ์ ์ด๋ฆ ์๋ต ๋ถ๊ฐ๋ฅ
function add(x,y) {
return x+y;
}
//2. ํจ์ ํํ์ : ํจ์ ์ด๋ฆ ์๋ต ๊ฐ๋ฅ
const add = function(x,y) {
return x+y;
}
//3. Function ์์ฑ์ ํจ์
const add = new Function('x', 'y', 'return x+y');
//4. ํ์ดํ ํจ์
const add = (x,y) => x+y;
ํจ์ ์ ์ธ๋ฌธ๊ณผ ํจ์ ํํ์์ ํธ์ด์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ ์ฐจ์ด๊ฐ ์๋๋ฐ ํจ์ ์ ์ธ๋ฌธ์ ๊ฒฝ์ฐ, ๋ฐํ์ ์ด์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์ ๋จผ์ ์คํ๋์ด, ํจ์ ์์ฒด๋ฅผ ํธ์ด์คํ ์ํฌ ์ ์๋ค. ๋ฐ๋ฉด, ํจ์ ํํ์์ ์์์ ๋ดค๋ ๋ณ์ ํธ์ด์คํ ๊ณผ ๊ฐ์ด ๋ฐํ์ ์ด์ ์ ํด๋น ๊ฐ์ undefined๋ก ์ด๊ธฐํ๋ง ์ํค๊ณ , ๋ฐํ์์์ ํด๋น ํจ์ ํํ์์ด ํ ๋น๋์ด ๊ทธ๋ ๊ฐ์ฒด๊ฐ ๋๋ค.
ํนํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ๋ณ์๋ฅผ ์ ์ธํ ๋ var, let, const ์ ์ธ๋ฌธ ์ฌ์ฉ์ ์ฃผ์๊ฐ ํ์ํ๋ค. ํนํ ES6์์ ๋์จ let, const๋ var ์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ๋๋ฌธ์ ๊ทธ ์ฐจ์ด๋ฅผ ์ ์๊ณ ์ ์ฉํ๋ ๊ฒ ์ค์ํ๋ค.
let์ ์ ์ธ ๋จ๊ณ์ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ๋ถ๋ฆฌ๋์ด ์งํ๋๋ค. ์ฆ, ๋ฐํ์ ์ด์ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ํด ์ ์ธ ๋จ๊ณ๊ฐ ๋จผ์ ์คํ๋์ง๋ง, ์ด๊ธฐํ ๋จ๊ณ๊ฐ ์คํ๋์ง ์์์ ๋ ํด๋น ๋ณ์์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ์ฐธ์กฐ ์๋ฌ๊ฐ ๋๋ค. ๋ฐ๋ผ์ let ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ค์ฝํ์ ์์ ์ง์ ๋ถํฐ ์ด๊ธฐํ ๋จ๊ณ ์์ ์ง์ ๊น์ง ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ ์ผ์์ ์ฌ๊ฐ์ง๋(Temporal Dead Zone: TDZ) ๊ตฌ๊ฐ์ ์กด์ฌํ๋ค.
๋ฐ๋ฉด const ํค์๋๋ ์ ์ธ ๋จ๊ณ์ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ๋์์ ์งํ๋๋ค. ๋ฐ๋ผ์ ๋ฐํ์ ์ด์ ์๋ ์คํ๋ ์ ์๋ค. ์ด๊ธฐํ๊ฐ ์งํ๋์ง ์์ ์ํ์์๋ ์๋ฌ ๋ฌธ๊ตฌ๊ฐ ๋ฌ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ์์ ์ค์ฝํ๋ ์ต๋ํ ์ข๊ฒ ๋ง๋๋ ๊ฒ์ ๊ถ์ฅํ๋ค. ๋ฐ๋ผ์ var ํค์๋ ๋ณด๋ค๋ let, const ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ณ๊ฒฝํ์ง ์๋ ๊ฐ(์์๋ผ๋ฉด let ๋ณด๋ค๋ const ํค์๋)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ํ๊ฒ ๋ค.
Point #2 index.html button type์ ์ฐจ์ด์
submit button์ "keypress"๋ก ์ ์ดํ๋ ๋ถ๋ถ์ keydown์ผ๋ก ๋ณ๊ฒฝํ๊ณ index.html์ button type ์์ฑ์ "button"์์ "submit"์ผ๋ก ๋ณ๊ฒฝํ๋ ๋ฉ๋ด ์์ดํ ์ด ์ค๋ณต์ ์ผ๋ก ์ถ๊ฐ๋๋ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๋ค. ๊ทธ๋์ ๋ฐฉ๋ฒ์ ๋ชป์ฐพ๊ณ ๊ฒฐ๊ตญ์ button์ผ๋ก ์๋ณต์ ํ๋๋ฐ.. ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ ํตํด์ ํด๊ฒฐ์ด ๊ฐ๋ฅํ ๋ถ๋ถ์ธ์ง๋ ๋ฆฌํฉํ ๋ง ๊ณผ์ ์์ ํ์ธํด๋ด์ผํ ๊ฒ ๊ฐ๋ค.
Point #3 ๊นจ๋ฌ์ ๊ฒ
1. data-* ์์ฑ์ด๋ผ๊ณ ?
data-* ์์ฑ์ ์ด์ฉํ menuId ๊ตฌ๋ถ๊ณผ this.currentCategory ์ํ๋ฅผ ํตํ ๋ฐฐ์ด ๋ถ๋ฆฌ๊ฐ ๊ธฐ์ต์ ๋จ๋๋ค. ์์ฑ์ DOM ๋ ธ๋์ ์ ์ฉํ ์ด๋ฆ ๊ทธ๋๋ก๊ฐ ์ฌ์ฉ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํ๋๋ฐ *.dataset.{camel-case ์์ฑ๋ช } ์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค๋ ๋๋ฌด ์ ์ ํ๋ค. ๐คญ
HTML5 ํน์ ์์์ ์ฐ๊ด๋์ด ์์ง๋ง ํ์ ๋ ์๋ฏธ๋ ๊ฐ์ง ์๋ ๋ฐ์ดํฐ์ ๋ํ ํ์ฅ ๊ฐ๋ฅ์ฑ์ ์ผ๋์ ๋๊ณ ๋์์ธ๋์์ต๋๋ค. data-* ์์ฑ์ ํ์ค์ด ์๋ ์์ฑ์ด๋ ์ถ๊ฐ์ ์ธ DOM ์์ฑ, Node.setUserData()๊ณผ ๊ฐ์ ๋ค๋ฅธ ์กฐ์์ ํ์ง ์๊ณ ๋, ์๋ฏธ๋ก ์ ํ์ค HTML ์์์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ์ฅํ ์ ์๋๋ก ํด์ค๋๋ค. - MDN
2. ํด๋ฆฐ ์ฝ๋๋ฅผ ํฅํ ์ฌ์ . ๋ฆฌํฉํ ๋ง์ ์ด๋ ต๋ค.
์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์คํ๋ ค ์ฝ๋ค. ๊ธฐ๋ฅ์ด ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ๋์ํ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ํจ์๋ค์ ์ถ์ํ ์ ๋์ ๋ง๊ฒ ์์น๋ฅผ ์กฐ์ ํ๊ณ ๊ธฐ๋ฅ์ ๋ถ๋ฆฌํ๋ค. ๋ณ์๋ช ์ ๋ช ์์ ์ด๊ฒ ์์ฑํ๊ณ ์ฝ๋ ์ฌ๋์ด ์ฑ ์ ์ฝ๋ฏ ์ดํด๊ฐ ์ ๋๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ณ ํ๊ฒจ์ด ์์ ์ด๋ค. ์ํํธ์จ์ด ์์ง๋์ด๋ง์ด๋ ์ง์ ์ฅ์ธ ์ ์ ์ด ๊น๋ ํ์๊ฐ๋ค.. ์ฒ์๋ถํฐ ํด๋ฆฐ ์ฝ๋๋ก ์์ฑํ ์์ฌ์ ๋ถ๋ฆฌ์ง ๋ง์. ๊ทธ๊ฒ์ ๋ถ๊ฐ๋ฅํ ์์ญ์ด๋ค. ์ฐจ๋ผ๋ฆฌ ์ฝ๋ ๋ฆฌํฉํ ๋ง ์๊ฐ์ ๋๋ ค์ผ ํ๋ค.
3. ๋๋์ด ๋๋ง์ ํ์ต๋ฒ์ ์ฐพ์๋ค!
์คํฐ๋ ํ๋์ ํ๋ฉด์ ์ ๋นํ ๋๊ธฐ ๋ถ์ฌ์ ๋์ด๋ ์กฐ์ , ์ ์ ํ ํผ๋๋ฐฑ์ด ํ์ต๋ฒ์ ๋ํ ๋ชฐ์ ๊ณผ ์๊ธฐ ๋ง์กฑ๊ฐ์ ํฐ ์ํฅ์ ๋ผ์น๋ ๊ฒ ๊ฐ๋ค. ๋ชจ๋ฅด๋ ๋ถ๋ถ์ด ์๊ธฐ๋ฉด ๊ณง๋ฐ๋ก ์ฐพ์๋ณด๊ณ ์ง์คํ๋ค. ๊ธฐ์ด ์์ ์ ์ฝ๊ณ ์ข์ ์ฝ๋์ ๋ํ ์ธ์๊ณผ ์ฒ ํ์ ๊ฐ์ถ๋ค. ์์ฒด ํ์ต๋ฒ๊ณผ ์ธ์ฌ์ดํธ๋ฅผ ๋์์์ด ํ๊ตฌํ๋ค. ๊ฑฐ์ฐฝํ์ง ์๊ณ ๋์๊ฐ์ ์๋๊ฐ ๊ฑฐ๋ถ์ด๊ฐ์๋ ํ๋ฃจํ๋ฃจ ํบ์๋ณด๋ฉฐ ์ ๋๋ก ์ง์์ ์์๊ฐ๋ ๊ณผ์ ์ด ๋๋ฌด ์ฌ๋ฐ๋ค. 1๋ ๋จ์ง๋์ ์ค๋ ฅ์ด ๋๋ ๊ฒ ๊ฐ์ง ์๋ ํ์ต๋ฒ์ ๋ํ ๊ฐ์ฆ์ด ํด์๋์ด๊ฐ๋ค. ๋ง์ง๋ง 3์ฃผ์ฐจ๊น์ง๋ ๋๋ง์ ํ์ด์ค๋ก ์ ๋ฌ๋ ค๋ด์ผ๊ฒ ๋ค. ๐๐ปโ๏ธ๐จ
4. ๋ํ ์ผ์ ๋ํ ์ฌ๋ฏธ
๊ตฌํ ์ค ์ฌ์ฉ์ ์ ์ฅ์์ ์๊ฐํด๋ณด๋ฉด์ ํธ๋ฆฌํ ๊ฒ ๊ฐ์ ๊ธฐ๋ฅ๋ค์ด ๋ ์ค๋ฅด๋ฉด ์กฐ๊ธ์ฉ ์ถ๊ฐํ๋ ์ฌ๋ฏธ๊ฐ ์๋ค. ๊ฐ๋ น, ๋ฉ๋ด๊ฐ ์ถ๊ฐ๋๊ณ ๋๋ฉด input ๋ ธ๋์ auto focusing์ด ๋๋ค๊ฑฐ๋ this.menuItems[this.currentCategory] ๋ณ์์ ์ฌ์ฌ์ฉ์ฑ์ ์ํด ๋ณ์์ key ๊ฐ์ ๋จ์ String์ผ๋ก ์ ์ฉํ์ง ์๊ณ Array[i] ๊ฐ์ฒด ๊ฐ์ผ๋ก ์ ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฒ ๋ง์ด๋ค. ์ฝ๋์ ํจ์จ์ฑ์ ๊ณ ๋ฏผํ๊ณ ๋ด ์๊ฐ๋๋ก ๋์ํ ๋์ ์พ๊ฐ์ด๋ ..! ์๊ตฌ์ฌํญ์ ๊ธฐ์ฌ๋ ์ฃผ์ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ์ด๋ค. ๊ธฐ๋ฅ์ด ๋์๊ฐ๋ฉด 70% ์ง๋ฆฌ ์๋น์ค๋ค. UX์ ๊ด์ ์ผ๋ก ์๊ฐํ๊ณ ๊ทธ์ ๊ฑธ๋ง๋ ๋ง์กฑ๋๋ฅผ ์คฌ์ ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก์ ๊ฐ์ฅ ๋ณด๋์ ๋๋๋งํ ์๊ฐ ์๋๊น?