๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Programming/Javascript

[ES6] ES6 (ES2015) ๋ฌธ๋ฒ• ์—ฌ๋Ÿฌ๊ฐ€์ง€

1. const, let

๋ณดํ†ต ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐฐ์šธ ๋•Œ var๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•๋ถ€ํ„ฐ ๋ฐฐ์šฐ์ง€๋งŒ var๋Š” ์ด์ œ const์™€ let์ด ๋Œ€์ฒดํ•œ๋‹ค.

 

๋ธ”๋ก ์Šค์ฝ”ํ”„

โ“ var๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ

 

โ“‘ const๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ

 

var๋Š” ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ if๋ฌธ์˜ ๋ธ”๋ก๊ณผ ๊ด€๊ณ„์—†์ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ const์™€ let์€ ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ๋ธ”๋ก ๋ฐ–์—์„œ๋Š” ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ๋ธ”๋ก์˜ ๋ฒ”์œ„๋Š” if, while, for, function ๋“ฑ์˜ ์ค‘๊ด„ํ˜ธ์ด๋‹ค.

→ ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„ ๋Œ€์‹  ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํ˜ธ์ด์ŠคํŒ… ๊ฐ™์€ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐ๋˜๊ณ  ์ฝ”๋“œ ๊ด€๋ฆฌ๋„ ์ˆ˜์›”ํ•ด์ง

 

const์™€ let์˜ ์ฐจ์ด

const๋Š” ํ•œ ๋ฒˆ ๋Œ€์ž…ํ•˜๋ฉด ๋‹ค๋ฅธ ๊ฐ’์„ ๋Œ€์ž…ํ•  ์ˆ˜ ์—†๋‹ค. const์— ๋‹ค๋ฅธ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋ ค ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ดˆ๊ธฐํ™” ์‹œ ๊ฐ’์„ ๋Œ€์ž…ํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

2. ํ…œํ”Œ๋ฆฟ ๋ฌธ์ž์—ด

ES2015 ๋ฌธ๋ฒ•์— ํฐ ๋”ฐ์˜ดํ‘œ๋‚˜ ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๋Š” ๊ธฐ์กด ๋ฌธ์ž์—ด๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋ฐฑํ‹ฑ(`)์œผ๋กœ ๊ฐ์‹ธ๋Š” ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์ด ๋“ฑ์žฅํ•˜์˜€๋‹ค. ์ด๋ฅผ ํ…œํ”Œ๋ฆฟ ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ํ•˜๊ณ  ํŠน์ดํ•œ ์ ์€ ๋ฌธ์ž์—ด ์•ˆ์— ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

3. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด

๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์— ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ๋“ค์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

 

 

 

  • sayJS ๊ฐ™์€ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ์— ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ฒฐํ•  ๋•Œ ๋”๋Š” ์ฝœ๋ก (:)๊ณผ function์„ ๋ถ™์ด์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • sayNode: sayNode์ฒ˜๋Ÿผ ์†์„ฑ๋ช…๊ณผ ๋ณ€์ˆ˜๋ช…์ด ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•œ ๋ฒˆ๋งŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ˆ์ „ ๋ฌธ๋ฒ•์—์„œ๋Š” 'ES6'์ด๋ผ๋Š” ์†์„ฑ๋ช…์„ ๋งŒ๋“œ๋ ค๋ฉด ๋ฆฌํ„ฐ๋Ÿด ๋ฐ”๊นฅ์—์„œ [es + 6]์„ ํ–ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ ES6์—์„œ๋Š” ๋ฆฌํ„ฐ๋Ÿด ๋‚ด์—์„œ ์„ ์–ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

4. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜(arrow function)๋ผ๋Š” ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, ๊ธฐ์กด์˜ function( ) { }๋„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

๊ธฐ์กด function๊ณผ ๋‹ค๋ฅธ ์ ์€ this ๋ฐ”์ธ๋“œ ๋ฐฉ์‹์ด๋‹ค.

 

 

  • relationship1.logFriends() ์•ˆ์˜ forEach ๋ฌธ์—์„œ๋Š” function ์„ ์–ธ๋ฌธ์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๊ฐ์ž ๋‹ค๋ฅธ ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ that์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ relationship1์— ๊ฐ„์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•˜๊ณ  ์žˆ๋‹ค.
  • relationship2.logFriends() ์•ˆ์˜ forEach ๋ฌธ์—์„œ๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ”๊นฅ ์Šค์ฝ”ํ”„์ธ logFriends()์˜ this๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. → ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ

 

5. ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น

๊ฐ์ฒด์™€ ๋ฐฐ์—ด๋กœ๋ถ€ํ„ฐ ์†์„ฑ์ด๋‚˜ ์š”์†Œ๋ฅผ ์‰ฝ๊ฒŒ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

  •  candyMachine ๊ฐ์ฒด ์•ˆ์˜ ์†์„ฑ์„ ์ฐพ์•„์„œ ๋ณ€์ˆ˜์™€ ๋งค์นญํ•ด์ค€๋‹ค. count์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„ ์•ˆ์˜ ์†์„ฑ๋„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐฐ์—ด๋„ ๋น„๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

6. ํ”„๋กœ๋ฏธ์Šค

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋…ธ๋“œ์—์„œ๋Š” ์ฃผ๋กœ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•œ๋‹ค. ํŠนํžˆ ์ด๋ฒคํŠธ ์ฃผ๋„ ๋ฐฉ์‹ ๋•Œ๋ฌธ์— ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค. ES6๋ถ€ํ„ฐ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋…ธ๋“œ์˜ API๋“ค์ด ์ฝœ๋ฐฑ ๋Œ€์‹  ํ”„๋กœ๋ฏธ์Šค(Promise) ๊ธฐ๋ฐ˜์œผ๋กœ ์žฌ๊ตฌ์„ฑ๋œ๋‹ค.

 

ํ”„๋กœ๋ฏธ์Šค ์‚ฌ์šฉ๋ฒ•

1. ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด ์ƒ์„ฑ

  • new Promise๋กœ ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์•ˆ์— resolve์™€ reject๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ–๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
  • ํ”„๋กœ๋ฏธ์Šค ๋‚ด๋ถ€์—์„œ resolve๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด then์ด ์‹คํ–‰๋˜๊ณ , reject๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด catch๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
  • resolve์™€ reject์— ๋„ฃ์–ด์ค€ ์ธ์ž๋Š” ๊ฐ๊ฐ then๊ณผ catch์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, resolve('์„ฑ๊ณต')๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด then์˜ message๊ฐ€ '์„ฑ๊ณต'์ด ๋œ๋‹ค. ๋งŒ์•ฝ reject('์‹คํŒจ')๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด catch์˜ error๊ฐ€ '์‹คํŒจ'๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

2. then์ด๋‚˜ catch์—์„œ ๋‹ค์‹œ ๋‹ค๋ฅธ then์ด๋‚˜ catch๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.

 

 

  • ์ฒ˜์Œ then์—์„œ message๋ฅผ resolveํ•˜๋ฉด ๋‹ค์Œ then์—์„œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‹ค์‹œ message2๋ฅผ resolve ํ–ˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ then์—์„œ message3๋ฅผ ๋ฐ›๋Š”๋‹ค.

 

3. 2๋ฒˆ ๋‚ด์šฉ์„ ํ™œ์šฉํ•˜์—ฌ ์ฝœ๋ฐฑ์„ ํ”„๋กœ๋ฏธ์Šค๋กœ ๋ฐ”๊ฟ”๋ณด๊ธฐ

 

 

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

 

 

  • ์ฝ”๋“œ์˜ ๊นŠ์ด๊ฐ€ ๋” ์ด์ƒ ๊นŠ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.
  • then ๋ฉ”์„œ๋“œ๋“ค์€ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. 
  • ์ฝœ๋ฐฑ์—์„œ ๋งค๋ฒˆ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ–ˆ๋˜ ์—๋Ÿฌ๋„ ๋งˆ์ง€๋ง‰ catch์—์„œ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

ํ•˜์ง€๋งŒ ๋ชจ๋“  ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์œ„์™€ ๊ฐ™์ด ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ๊ฐ€ ํ”„๋กœ๋ฏธ์Šค ๋ฐฉ์‹์„ ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค.

(์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” findOne๊ณผ save ๋ฉ”์„œ๋“œ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.

 

Promise.all()

๊ธฐ์กด์˜ ์ฝœ๋ฐฑ ํŒจํ„ด์ด์—ˆ๋‹ค๋ฉด ์ฝœ๋ฐฑ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ค‘์ฒฉํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์ง€๋งŒ, Promise.all์„ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

  • Promise.resolve๋Š” ์ฆ‰์‹œ resolveํ•˜๋Š” ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋น„์Šทํ•œ ๊ฒƒ์œผ๋กœ ์ฆ‰์‹œ rejectํ•˜๋Š” Promise.reject๋„ ์žˆ๋‹ค.
  • ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ๋•Œ Promise.all์— ๋„ฃ์œผ๋ฉด ๋ชจ๋‘ resolve๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ then์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
  • result ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ฐ๊ฐ์˜ ํ”„๋กœ๋ฏธ์Šค ๊ฒฐ๊ด๊ฐ’์ด ๋ฐฐ์—ด๋กœ ๋“ค์–ด์žˆ๋‹ค.
  • Promise ์ค‘ ํ•˜๋‚˜๋ผ๋„ reject๊ฐ€ ๋˜๋ฉด catch๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

 

7. async/await

๋…ธ๋“œ 7.6 ๋ฒ„์ „๋ถ€ํ„ฐ ์ง€์›๋˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ŠคํŽ™์€ ES2017์ด๋‹ค. (๊ต‰์žฅํžˆ ํ˜์‹ ์ ์ด๊ณ  ์ตœ์‹  ๊ธฐ๋Šฅ) ํŠนํžˆ ๋…ธ๋“œ์ฒ˜๋Ÿผ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•ด์•ผํ•  ๋•Œ ๋„์›€์ด ๋งŽ์ด ๋œ๋‹ค. ์œ„์˜ ์ฝ”๋“œ๋ฅผ async/await์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๊น”๋”ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

 

 

  • ํ•จ์ˆ˜ ์„ ์–ธ๋ถ€๋ฅผ ์ผ๋ฐ˜ ํ•จ์ˆ˜ ๋Œ€์‹  async function์œผ๋กœ ๊ต์ฒดํ•œ ํ›„, ํ”„๋กœ๋ฏธ์Šค ์•ž์— await์„ ๋ถ™์—ฌ์ฃผ์—ˆ๋‹ค. 
  • ํ•จ์ˆ˜๋Š” ํ•ด๋‹น ํ”„๋กœ๋ฏธ์Šค๊ฐ€ resolve๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ๋’ค ๋‹ค์Œ ๋กœ์ง์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, await Users.findOne({})์ด resolve๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ๋’ค, user ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

  • try/catch ๋ฌธ์œผ๋กœ ๋กœ์ง์„ ๊ฐ์‹ธ์„œ catch๋กœ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

 

  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋„ async๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

for๋ฌธ๊ณผ async/await์„ ๊ฐ™์ด ์จ์„œ Promise.all์„ ๋Œ€์ฒดํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

(์ถœ์ฒ˜ : Node.js ๊ต๊ณผ์„œ)