Insight

VanillaJS ์Šคํ„ฐ๋””, 2์ฃผ์ฐจ์˜ ํšŒ๊ณ ๋ก

realhee 2022. 2. 18. 20:07
๋ฐ˜์‘ํ˜•

1์ฃผ์ฐจ ๐ŸงŠ

ํŒ€ ๋งŒ๋“ค๊ธฐ์™€ ์•„์ด์Šค ๋ธŒ๋ ˆ์ดํ‚น์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ณธ๊ฒฉ์ ์ธ 1์ฃผ์ฐจ ๋ฏธ์…˜์ด ์‹œ์ž‘๋๋‹ค.

 

๋‚˜๋Š” ์‚ฌ์‹ค ๋ธ”๋ž™์ปคํ”ผ ์ฝ”๋“œ๋ฆฌ๋ทฐ ์Šคํ„ฐ๋””๋Š” ์ฒ˜์Œ์ด ์•„๋‹ˆ๋‹ค. ์•ฝ 1๋…„ ์ „์— 5๊ธฐ์— ์ฐธ์—ฌํ–ˆ์—ˆ๋Š”๋ฐ ๊ทธ๋•Œ๋„ ์ข‹์•˜์ง€๋งŒ ์ง€๊ธˆ์€ ์œ ๋ฐ๋ฏธ ๊ฐ•์˜์™€ ์˜จ๋ผ์ธ ์„ธ์…˜์˜ ํ€„๋ฆฌํ‹ฐ๊ฐ€ ๋น„๊ต ๋ถˆ๊ฐ€์ •๋„๋กœ ์ข‹์•„์ง€๋ฉฐ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ์ฝ”๋“œ๋ฆฌ๋ทฐ์™€ ์ธ์‚ฌ์ดํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•ด ์ง„ ๊ฒƒ ๊ฐ™๋‹ค. ์Šค๋งˆํŠธํ•œ ์Šคํ„ฐ๋””์˜ ์™„์„ฑ๋ณธ๊ฐ™๋‹ค๊ณ  ํ• ๊นŒ?

ํŠนํžˆ ๋ฉ”ํƒ€๋ฒ„์Šค์™€ notion์„ ํ†ตํ•œ ์„ธ์…˜ ์ง„ํ–‰ ๋ฐฉ์‹์€ ์ •๋ง ์ƒ‰๋‹ฌ๋ž๋‹ค.

 

 

 

์˜จ๋ผ์ธ ์„ธ์…˜์€ gather town์„ ์ด์šฉํ•œ ๋ฉ”ํƒ€๋ฒ„์Šค ํ˜•์‹์œผ๋กœ ์ง„ํ–‰๋๋‹ค

 

 

 

์šฐ๋ฆฌ ํŒ€์€ 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 ๊ธฐ๋Šฅ
  •  ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„ ๋ฉ”๋‰ดํŒ ๊ด€๋ฆฌ
  •  ํ’ˆ์ ˆ ๋ฒ„ํŠผ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

 

 

 

์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๊ทธ์— ๋งž๋Š” ๋ฉ”๋‰ด๋ฆฌ์ŠคํŠธ(state)๊ฐ€ render ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 

 

ํŠนํžˆ ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„ ๋ฉ”๋‰ดํŒ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ๋งˆ๋‹ค menuItems ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝ์‹œ์ผœ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— setState, render ํ•จ์ˆ˜๋ฅผ ํ†ตํ•œ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ  ์ ์šฉํ•ด๋ณด๊ฒŒ ๋๋‹ค.

 

๊ฐ€์žฅ ์ฒ˜์Œ ์–ด๋–ค ๋ณ€์ˆ˜๋ฅผ state๋กœ ๋งŒ๋“ค์ง€ ๊ณ ๋ฏผ์Šค๋Ÿฌ์› ๋‹ค. setState, render ํ•จ์ˆ˜๋ฅผ ์–ด๋Š ์‹œ์ , ์–ด๋–ค ๊ณณ์— ๋ฐฐ์น˜ํ•ด์•ผํ• ์ง€ ์ƒ๊ฐํ•ด๋ณด๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ๊ณ ์ณ๋ณด๊ณ  ์›๋ณตํ•˜๊ณ .. (๊ฒฐ๋ก  : ๋ณธ๋ž˜ ์ƒํƒœ๋ณ€๊ฒฝ์€ ์–ด๋””์„œ๋“  ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋ถ€๋ชจ์—๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด ๋ถ€ํƒํ•˜๋Š” ํ˜•์‹์œผ๋กœ ๊ฐ€๋ณ€์„ฑ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค!) ๊ทธ๋ ‡๊ฒŒ ๋ณ„ ๋‹ค๋ฅธ ์ฝ”๋“œ ์ž‘์„ฑ ์—†์ด 2์ผ์ด ์ง€๋‚˜๋ฒ„๋ ธ๋‹ค..

 

์ธํ„ฐ๋„ท์— ์ƒํƒœ ๊ด€๋ฆฌ ๊ด€๋ จ ํฌ์ŠคํŒ…๋“ค๊ณผ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด๋”๋ผ๋„ ์ƒ๊ฐ๋Œ€๋กœ ์ฝ”๋“œ์— ์ ์šฉ์ด ์•ˆ๋˜๋‹ˆ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋Ÿฌ๋˜ ์ค‘ ์ด๋ฒˆ์— ํšŒ์‚ฌ ์ ์‹ฌ์‹œ๊ฐ„์— ์„œ์ ์— ๋“ค๋Ÿฌ makerjun๋‹˜์ด ๋ธ”๋กœ๊ทธ์— ์˜ฌ๋ ค ๋†“์œผ์‹  ํ”„๋ก ํŠธ์—”๋“œ ์ถ”์ฒœ ๋„์„œ๋“ค์„ ๋ช‡ ๊ถŒ ๊ตฌ๋งคํ–ˆ๋Š”๋ฐ, YOU DON'T KNOW JS๋ฅผ ์ฝ์ž๋งˆ์ž ๊ณง๋ฐ”๋กœ ์œ ๋ ˆ์นด๋ฅผ ์™ธ์ณค๋‹ค..! โœจ

 

๋ถ€๋„๋Ÿฌ์šด ๊ณ ๋ฐฑ์ด์ง€๋งŒ ์‹ค๋ฌด์— ๋“ค์–ด์˜จ ์ง€ 4๋…„์ด ์ง€๋‚ฌ์ง€๋งŒ ๋Œ€ํ•™ ์ „๊ณต ์„œ์  ์ดํ›„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€๋ จ ์„œ์ ์„ ๋ˆ์„ ์ฃผ๊ณ  ๊ตฌ๋งคํ•œ ์ ์ด ์—†์—ˆ๋‹ค. ๋น ๋ฅด๊ฒŒ ๋ณ€ํ™”ํ•˜๋Š” ๊ธฐ์ˆ  ์Šคํƒ ์‚ฌ์ด์—์„œ ๋ฌธ์„œ๋กœ ๋œ ์ฑ…์€ oldํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ํŠนํžˆ ์‚ฌ๋‘๋ฉด ์™„๋…ํ•˜์ง€ ๋ชปํ•  ๊ฒƒ๋งŒ ๊ฐ™์€ ๋ถ€๋‹ด๊ฐ๊ณผ ๋จผ์ง€ ์Œ“์ธ ์ฑ…๋“ค์ด ์ฃผ๋งˆ๋“ฑ์ฒ˜๋Ÿผ ์Šค์ณ์ง€๋‚˜๊ฐ”๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒŒ ์›ฌ๊ฑธ? ๋‚ด๊ฐ€ ๊ถ๊ธˆํ•œ ์ฑ•ํ„ฐ๋งŒ ๋ช‡ ์ค„ ์ฝ์—ˆ๋Š”๋ฐ๋„ ์ƒํƒœ ๊ด€๋ฆฌ์™€ this, ์Šค์ฝ”ํ”„, ํ˜ธ์ด์ŠคํŒ…์— ๋Œ€ํ•œ ๊ถ๊ธˆ์ฆ์ด ๋ฐ”๋กœ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋จธ๋ฆฌ๊ฐ€ ์กฐ๊ธˆ์”ฉ ์ •๋ฆฌ๊ฐ€ ๋˜์–ด๊ฐ”๊ณ  ์ฝ”๋“œ ์ž‘์„ฑ์—๋„ ๊ฐ€์†๋„๊ฐ€ ๋ถ™์—ˆ๋‹ค.

 

 

JS ๊ธฐ๋ฐ˜์œผ๋กœ ์ถœ๊ฐ„๋œ ๋ฆฌํŒฉํ„ฐ๋ง 2ํŒ๊ณผ Clean Code๋Š” ๋ฐ”์ด๋ธ”์ด๋ผ๊ณ  ํ•˜๊ธฐ์— ์ถ”๊ฐ€ ๊ตฌ๋งคํ–ˆ๋‹ค.

 

 

ํŠœํ† ๋ฆฌ์–ผ์„ ์ฝ์„ ๋•Œ ๋‚ด๊ฐ€ ์•Œ๊ณ ์‹ถ์€ ๊ฒƒ์ด ๋ญ”์ง€ ๋ชฉ์ฐจ๋ฅผ ํ†ตํ•ด ํฐ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋ฅด๋Š” ๊ฑธ ์•Œ์•„๋‚ด๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์œผ๋กœ ์ฝ์–ด์•ผ ํšจ์œจ์ ์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ ์ž‘์„ฑํ•  ํ”„๋กœ๊ทธ๋žจ์„ ์—ผ๋‘์— ๋‘๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ '์ ๊ทน์  ์ฝ๊ธฐ'๋ผ๊ณ  ํ•œ๋‹ค. - ํ•จ๊ป˜ ์ž๋ผ๊ธฐ
์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์˜คํ”ˆ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ฝ์–ด๋ผ.
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š” ํ‚ค์›Œ๋“œ์™€ ๋ง๋ญ‰์น˜๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค - ํ•จ๊ป˜ ์ž๋ผ๊ธฐ

 

 

 

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์  ๊ด€์ ์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ๊ทธ์— ๊ฑธ๋งž๋Š” ๋งŒ์กฑ๋„๋ฅผ ์คฌ์„ ๋•Œ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ์„œ ๊ฐ€์žฅ ๋ณด๋žŒ์„ ๋Š๋‚„๋งŒํ•œ ์ˆœ๊ฐ„ ์•„๋‹๊นŒ?

 

๋ฐ˜์‘ํ˜•