Best Practices for Using Modern JavaScript Syntax - Lee-hyuna/33-js-concepts-kr GitHub Wiki

์ตœ์‹  JavaScript ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€

์ด ๊ธฐ์‚ฌ๋Š” ์šฐ๋ฆฌ์˜ ์ฑ…(JavaScript : Best Practice)์— ์†Œ๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  JavaScript์˜ ๊ธ‰๋ณ€ํ•˜๋Š” ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.

์ตœ์‹  JavaScript๋Š” ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„์›Œํฌ ๋ฐ ํ™˜๊ฒฝ์˜ ๋ณ€ํ™”ํ•˜๋Š” ์š”๊ตฌ๋ฅผ ์ถฉ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋น ๋ฅด๊ฒŒ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋ฉด ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•˜๊ณ  ๊ธฐ์ˆ ์„ ํ–ฅ์ƒ ์‹œํ‚ค๋ฉฐ ์ข‹์€ ์ฝ”๋“œ์™€ ํ›Œ๋ฅญํ•œ ์ฝ”๋“œ์˜ ์ฐจ์ด๋ฅผ ํ‘œ์‹œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  JavaScript๊ฐ€ ๋ฌด์—‡์„ํ•˜๋ ค๊ณ  ํ•˜๋Š”์ง€ ์•Œ๋ฉด ์ƒˆ๋กœ์šด ๊ตฌ๋ฌธ์„ ๊ฐ€์žฅ ์œ ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ๋•Œ์™€ ๊ธฐ์กด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•œ์‹œ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค.

๋ญ”๊ฐ€์— ์ง‘์ฐฉํ•˜๋Š” ๊ฒƒ

์š”์ฆ˜ JavaScript๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ๊ฑฐ๋‚˜ ํ•œ๋™์•ˆ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์˜จ ์‚ฌ๋žŒ์ด๋“ , JavaScript ์ƒํƒœ์— ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•˜๋Š” ์‚ฌ๋žŒ์€ ์—†์Šต๋‹ˆ๋‹ค. ์ˆ˜๋งŽ์€ ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„ ์›Œํฌ, ์–ธ์–ด์— ๋Œ€ํ•œ ๋งŽ์€ ๋ณ€ํ™”, ๊ทธ๋ฆฌ๊ณ  ๊ณ ๋ คํ•ด์•ผ ํ•  ๋งŽ์€ ๋งฅ๋ฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋งค๋‹ฌ ๋ฐฐ์›Œ์•ผ ํ•  ๋ชจ๋“  ์ƒˆ๋กœ์šด ๊ฒƒ๋“ค์„ ๊ฐ€์ง€๊ณ  ๋ˆ„๊ตฌ๋‚˜ ์–ด๋–ค ์ผ์„ ํ•ด๋‚ด๊ฒŒ ๋˜๋Š” ๊ฒƒ์— ๋†€๋ผ์šด ์ผ์ž…๋‹ˆ๋‹ค.

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์•„๋ฌด๋ฆฌ ๋ณต์žกํ•˜๋”๋ผ๋„ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์„ฑ๊ณตํ•˜๋Š” ๋น„๊ฒฐ์€ ๊ธฐ๋ณธ์œผ๋กœ ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Rails๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ๋จผ์ € Ruby ๊ธฐ์ˆ ์„ ์ตํžˆ๊ณ , isomorphic React์—์„œ ๋ถˆ๋ณ€์„ฑ ๋ฐ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ webpack์„ ์‚ฌ์šฉํ•˜์—ฌ(๋˜๋Š” ์š”์ฆ˜ ์‹œ์›ํ•œ ๊ดด์งœ๋“ค์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—… (or whatever the cool nerds are doing these days)) ํ•ต์‹ฌ JavaScript๋ฅผ ์•Œ์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

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

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

Syntactic Sugar ํ•œ์Šคํ‘ผ

์ตœ๊ทผ ๋ช‡๋…„ ๋™์•ˆ JavaScript์˜ ๋งŽ์€ ๋ณ€ํ™”๊ฐ€ ๊ธฐ์กด ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ Syntactic Sugar๋กœ ๋ฌ˜์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋งŽ์€ ๊ฒฝ์šฐ์—, Syntactic Sugar๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ JavaScript๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜, ๋‚˜๋จธ์ง€ ์‚ฌ๋žŒ๋“ค์€ ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” ์ผ์„ ์„ฑ์ทจํ•˜๊ธฐ ์œ„ํ•œ ๋” ๊นจ๋—ํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ์›ํ•  ๋ฟ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ณ€ํ™”๋“ค์€ ๋งˆ๋ฒ•์˜ ์ƒˆ๋กœ์šด ๋Šฅ๋ ฅ์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ˜„๋Œ€์ ์ธ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ต์ˆ™ํ•œ ์˜ค๋ž˜๋œ ๊ธฐ์ˆ ์„ ๋‹ค์‹œ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์ดํ•ดํ•˜์ง€ ์•Š๊ณ  ์ ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด์ „์— ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ ํ•œ ์ฝ”๋“œ๋ฅผ ๋””๋ฒ„๊น…ํ•ด์•ผ ํ•จ
  • ๋Ÿฐํƒ€์ž„์— ์žก์„ ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ฌ˜ํ•œ ์‹ค์ˆ˜๋ฅผ ์†Œ๊ฐœ
  • ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ์‹คํŒจํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑ

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

๋‹น์‹ ์˜ const๊ฐ€ ์ผ๊ด€์„ฑ์ด ์—†์„ ๋•Œ

์ตœ์‹  JavaScript๋Š” let๊ณผ const๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ํ‚ค์›Œ๋“œ๋ฅผ ๋„์ž…ํ•˜์—ฌ ๋Œ€๋ถ€๋ถ„์˜ ๋ณ€์ˆ˜ ์„ ์–ธ์‹œ var์˜ ํ•„์š”์„ฑ์„ ํšจ๊ณผ์ ์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ var์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

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

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

console.log(usingVar); // undefined
var usingVar = "defined";
console.log(usingVar); // "defined"

console.log(usingLet); // error
let usingLet = "defined"; // never gets executed
console.log(usingLet); // never gets executed

let ๋˜๋Š” const๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„๋Š” ์„ ์–ธ ๋œ ๋กœ์ปฌ ๋ธ”๋ก์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. JavaScript์˜ ๋ธ”๋ก์€ ํ•จ์ˆ˜ ๋ณธ๋ฌธ ๋˜๋Š” ๋ฃจํ”„ ๋‚ด์˜ ์‹คํ–‰ ์ฝ”๋“œ์™€ ๊ฐ™์€ ์ค‘๊ด„ํ˜ธ {}๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.

์ด๋Š” ๋ฐ˜๋ณต์ž ๋ฐ ๋ฃจํ”„์™€ ๊ฐ™์€ ๋ณ€์ˆ˜์˜ ๋ธ”๋ก ์Šค์ฝ”ํ”„ ์‚ฌ์šฉ์— ๋งค์šฐ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ๋ฃจํ”„ ๋‚ด์—์„œ ์„ ์–ธ ๋œ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ์Šค์ฝ”ํ”„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฏ€๋กœ ์—ฌ๋Ÿฌ ์นด์šดํ„ฐ๊ฐ€ ๋™์ผํ•œ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ˜ผ๋™ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์Šคํฌ๋ฆฝํŠธ์˜ ํ•œ ๋ธ”๋ก ๋‚ด์—์„œ ์„ ์–ธ ๋œ ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•œ๋‹ค๋ฉด let์€ ๋‹น์‹ ์„ ์žก์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

for (var count = 0; count < 5; count++) {
  console.log(count);
} // outputs the numbers 0 - 4 to the console
console.log(count); // 5


for (let otherCount = 0; otherCount < 5; otherCount++) {
  console.log(otherCount);
} // outputs the numbers 0 - 4 to the console
console.log(otherCount); // error, otherCount is undefined

๋‹ค๋ฅธ ๋Œ€์ฒด ์„ ์–ธ์€ const์ด๋ฉฐ ์ƒ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์™„์ „ํžˆ ์ผ์ •ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ณ€์ˆ˜๋Š” var๋˜๋Š” let๋ณ€์ˆ˜์™€ ๋‹ฌ๋ฆฌ ๊ฐ’์—†์ด ์„ ์–ธ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

var x; // valid
let y; //valid
const z; // error

const ์„ ์–ธ ๋œ ํ›„์— ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

const z = 3; // valid
z = 4; // error

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๊ฒฝ์šฐ์— const๊ฐ€ ๋ถˆ๋ณ€์ธ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•  ๊ฒฝ์šฐ const๋กœ ์„ ์–ธ ๋œ ๊ฐ์ฒด ๋˜๋Š” ๋ฐฐ์—ด์ด ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด ๊นœ์ง ๋†€๋ž„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const z = []; // valid
z.push(1); // valid, and z is now [1]
z = [2] // error

์ด๋Ÿฐ ์ด์œ ๋กœ, ์‚ฌ๋žŒ๋“ค์ด ์„ ์–ธ ๋œ ํ›„์—๋Š” ์ ˆ๋Œ€๋กœ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ ค๋Š” ์˜๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„๋•Œ ๋ชจ๋“  ๋ณ€์ˆ˜ ์„ ์–ธ์— ๋Œ€ํ•ด var๋Œ€์‹  const ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜์—†๋Š” ๊ฒƒ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ JavaScript๋Š” ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ์˜ ๋„์›€์—†์ด const๋กœ ์„ ์–ธ๋œ ๋ฐฐ์—ด ๋ฐ ๊ฐ์ฒด์™€ ๊ฐ™์€ ์ฐธ์กฐ ๋ณ€์ˆ˜์˜ ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ๋Š” ์ด๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ constํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ฐ˜ ๋…์ž์™€ JavaScript ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ณดํ˜ธ๋ฅผ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฐ„๋‹จํ•œ ์ˆซ์ž ๋˜๋Š” ๋ฌธ์ž์—ด ๋ณ€์ˆ˜, ํ•œ ๋ฒˆ ์ •์˜ ํ•œ ๋‹ค์Œ ์ˆ˜์ •์„ ์œ„ํ•ด ๋‹ซ์•„๋‘๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ์ด๋ฆ„์ด ์ง€์ •๋œ ํ•จ์ˆ˜ ๋ฐ ํด๋ž˜์Šค์— const๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ๋ณ€์ˆ˜ ์„ ์–ธ์— let์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์„ ์–ธ ๋œ ๋ฒ”์œ„์— ์˜ํ•ด ๊ฒฝ๊ณ„๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๊ทผ์— var๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ํ•„์š”์„ฑ์„ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ณ  ์Šคํฌ๋ฆฝํŠธ ์ƒ๋‹จ์— ์˜ค๋ฅด๋Š” ์„ ์–ธ์„ ์›ํ•œ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„ ์ œํ•œ

function ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ ๋œ ๊ธฐ์กด ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ ๋œ ๋งค๊ฐœ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋ธ”๋ก ๋‚ด์— ์ •์˜ ๋œ ์ผ๋ จ์˜ ๋ช…๋ น๋ฌธ์„ ์‹คํ–‰ํ•˜๊ณ  ์„ ํƒ์ ์œผ๋กœ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋„๋ก ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function doSomething(param) {
  return(`Did it: ${param}`);
}
console.log(doSomething("Hello")); // "Did it: Hello"

๋˜ํ•œ new ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ํ”„๋กœํ†  ํƒ€์ž… ์ƒ์†์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ์ •์˜๋Š” ํ˜ธ์ถœ ๋  ์ˆ˜์žˆ๋Š” ์Šค์ฝ”ํ”„ ๋‚ด ์–ด๋Š ๊ณณ์— ๋‚˜ ๋ฐฐ์น˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function Animal(name) {
  this.name = name;
}
let cat = new Animal("Fluffy");
console.log(`My cat's name is ${cat.name}.`); // "My cat's name is Fluffy."

์ด๋Ÿฌํ•œ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ ์ „ํ›„์— ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JavaScript๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

console.log(doSomething("Hello")); // "Did it: Hello"

let cat = new Animal("Fluffy");
console.log(`My cat's name is ${cat.name}.`); // "My cat's name is Fluffy."

function doSomething(param) {
  return(`Did it: ${param}`);
}
function Animal(name) {
  this.name = name;
}

๊ธฐ์กด ํ•จ์ˆ˜๋Š” ๊ณ ์œ ํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๋ช…๋ น๋ฌธ ๋ณธ๋ฌธ์˜ ์Šค์ฝ”ํ”„ ๋‚ด์—์„œ๋งŒ ์กด์žฌํ•˜๋Š” ๊ฐ’์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์•ˆ์— ์ •์˜๋œ ๋ช…๋ น๋ฌธ์ด๋‚˜ ํ•˜์œ„ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋ฉฐ ์„ ํƒ์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ์ด์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ฐ”์ธ๋”ฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” ํ‚ค์›Œ๋“œ๊ฐ€ ๋งŽ์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ ์ด์ƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์‹  JavaScript๋Š” ๊ธฐ์กด ํ•จ์ˆ˜์˜ ๋™์ž‘์„ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Getting to Class on Time

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

JavaScript์˜ ํด๋ž˜์Šค๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์˜ ๊ฐ„๋‹จํ•œ ํด๋ž˜์Šค์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๊ฒŒ ๋ณด์ด๊ณ  ์ž‘๋™ํ•˜๋ฉฐ JavaScript๊ฐ€ ์„œ๋ฒ„๋กœ ํ™•์žฅ ๋จ์— ๋”ฐ๋ผ Java ๋ฐ C ++ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ์‰ฌ์šด ๋””๋”ค๋Œ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

JavaScript์—์„œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ˆ˜ํ–‰ ํ•  ๋•Œ ํ•จ์ˆ˜์™€ ํด๋ž˜์Šค์˜ ํ•œ ๊ฐ€์ง€ ์ฐจ์ด์ ์€ JavaScript์˜ ํด๋ž˜์Šค๋Š” C++์—์„œ์™€ ๊ฐ™์ด (Java์—์„œ๋Š” ์•„๋‹ˆ์ง€๋งŒ) ์ˆœ๋ฐฉํ–ฅ ์„ ์–ธ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, newํ‚ค์›Œ๋“œ๋กœ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ธฐ ์ „์— ์Šคํฌ๋ฆฝํŠธ์—์„œ class๋ฅผ ์„ ์–ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. functionํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ํ”„๋กœํ† ํƒ€์ž… ์ƒ์†์€ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋‚˜์ค‘์— ์ •์˜ํ•˜๋”๋ผ๋„ JavaScript์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. function์„ ์–ธ์€ class์™€๋Š” ๋‹ฌ๋ฆฌ ์ž๋™์œผ๋กœ ๋งจ ์œ„๋กœ ์˜ฌ๋ผ ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

// Using a function to declare and instantiate an object (hoisted)
let aProto = new Proto("Myra");
aProto.greet(); // "Hi Myra"

function Proto(name) {
  this.name = name;
  this.greet = function() {
    console.log(`Hi ${this.name}`);
  };
};

// Using a class to declare and instantiate an object (not hoisted)
class Classy {
  constructor(name) {
    this.name = name;
  }
  greet() {
    console.log(`Hi ${this.name}`);
  }
};

let aClassy = new Classy("Sonja");
aClassy.greet(); // "Hi Sonja"

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์™€์˜ ์ฐจ์ด์ 

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

const traditional = function(data) {
  return (`${data} from a traditional function`);
}
const arrow = data => `${data} from an arrow function`;

console.log(traditional("Hi")); // "Hi from a traditional function"
console.log(arrow("Hi"));  // "Hi from an arrow function"

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํŠน์„ฑ์„ ์บก์Šํ™”ํ•˜์—ฌ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ถ€๋ฅผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅผ ๋•Œ ์œ ์šฉํ•˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ํ–‰๋™์„ ๋ฐฐ์ œํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค ๋‹ค์–‘ํ•œ ๊ธฐ์กด functionํ‚ค์›Œ๋“œ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

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

class GreeterTraditional {
  constructor() {
    this.name = "Joe";
  }
  greet() {
    setTimeout(function () {
      console.log(`Hello ${this.name}`);
    }, 1000); // inner function has its own this with no name
  }
}
let greeterTraditional = new GreeterTraditional();
greeterTraditional.greet(); // "Hello "

class GreeterBound {
  constructor() {
    this.name = "Steven";
  }
  greet() {
    setTimeout(function () {
      console.log(`Hello ${this.name}`);
    }.bind(this), 1000); // passing this from the outside context
  }
}
let greeterBound = new GreeterBound(); // "Hello Steven"
greeterBound.greet();

class GreeterArrow {
  constructor() {
    this.name = "Ravi";
  }
  greet() {
    setTimeout(() => {
      console.log(`Hello ${this.name}`);
    }, 1000); // arrow function inherits this by default
  }
}
let greeterArrow = new GreeterArrow();
greeterArrow.greet(); // "Hello Ravi"

Understand What Youโ€™re Getting

์ด๊ฒƒ์€ ๋‹จ์ง€ syntactic sugar๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— JavaScript์˜ ๋งŽ์€ ์ƒˆ๋กœ์šด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ JavaScript์˜ ๊ธฐ์กด ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ์˜ค๋ž˜๋œ ์ด์œ ๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ข…์ข… ๊ธฐ์กด JavaScript ๊ตฌ๋ฌธ์„ ๊ณ„์† ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ฉฐ, ๋•Œ๋กœ๋Š” ์ƒˆ๋กœ์šด ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ํ›จ์”ฌ ๋นจ๋ฆฌ ์ž‘์„ฑํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒ”๋กœ์šฐํ•˜๋Š” ์˜จ๋ผ์ธ ์ž์Šต์„œ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์ž‘์„ฑ์ž๊ฐ€ var๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ํ”„๋กœํ† ํƒ€์ž… ์ƒ์†์„ ์„ ํ˜ธํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋ฌด์‹œํ•˜๊ฑฐ๋‚˜ ์ฝœ๋ฐฑ์˜ function๋ฌธ์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ ๋‚˜๋จธ์ง€ ๊ตฌ๋ฌธ์€ ๊ตฌ์–ด์ ์ด๋ฉฐ, ๊ธฐ์กด์˜ JavaScript๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฑด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚  JavaScript๊ฐ€ ํ•ญ์ƒ ๊ฐ€๋ฅด์ณ์ง€๊ณ  ์‚ฌ์šฉ๋œ ๊ธฐ์กด ๋ฐฉ์‹์„ ํ†ตํ•ด ๋ฐฐ์šฐ๊ณ  ์ ์šฉ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ๋“ค์ด ์—ฌ์ „ํžˆ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ดˆ๊ธฐํ™”์—์„œ let๊ณผ const, ์ฝœ๋ฐฑ์˜ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๋ฐ ํด๋ž˜์Šค๋ฅผ ๊ฐ์ฒด ์ง€ํ–ฅ ํŒจํ„ด์˜ ๊ธฐ์ดˆ๋กœ ๋ณด๋Š” ๊ฒฝ์šฐ ์•„๋งˆ๋„ ์˜ˆ์ œ์—์„œ ๋‹ค๋ฅธ ์ตœ์‹  JavaScript ์ฝ”๋“œ๋„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„๋Œ€ JavaScript์—์„œ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์–ธ์–ด๊ฐ€ ์‹ค์ œ๋กœํ•˜๋Š” ์ผ์—์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ต์ˆ™ํ•œ ๊ฒƒ์— ๋”ฐ๋ผ ํ•ญ์ƒ ๋ช…ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž‘์„ฑ์ค‘์ธ ์ฝ”๋“œ๊ฐ€ ๋‹ฌ์„ฑํ•˜๋ ค๋Š” ๋ชฉํ‘œ, ๋ฐฐํฌํ•ด์•ผ ํ•  ์œ„์น˜ ๋ฐ ๋‹ค์Œ์— ๋ˆ„๊ฐ€ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ธ์ง€ ์Šค์Šค๋กœ ๊ฒฐ์ •ํ•˜์‹ญ์‹œ์˜ค.

๋ฒˆ์—ญ ํŽ˜์ด์ง€ ์ฃผ์†Œ : https://www.sitepoint.com/modern-javascript-best-practices/