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 ๊ต๊ณผ์)