๐ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ
๐ ์ฝ๋ฐฑ ์ง์ฅ (Callback hell)
- ๋น๋๊ธฐ ๋ก์ง ์ฒ๋ฆฌ ์ค ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฐ์ํด์ ์ฌ์ฉํ ๋ ๋ฐ์
- ์ฝ๋ฐฑ ํจ์ ์์ ๋ ๋ค์ ํจ์ ํธ์ถ์ด ๋ฐ๋ณต๋๋ฉด์ ์ฝ๋์ ๋ค์ฌ์ฐ๊ธฐ๊ฐ ๋ณด๊ธฐ ํ๋ ์์ค๊น์ง ๊ฐ ์ํฉ
- ๋น๋๊ธฐ ํจ์์ ๊ฒฐ๊ณผ๋ ์์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋ฐฑ์ ์ฌ์ฉํจ
๋ฌธ์ ์
- ์ฝ๋ ๊ฐ๋
์ฑ ๋จ์ด์ง
- ์์ธ ์ฒ๋ฆฌ ๋ณต์ก๋ ์ฆ๊ฐ
ํด๊ฒฐ ๋ฐฉ๋ฒ
- ES6 ๋ฌธ๋ฒ ์ค ํ๋์ธ Promise๋ฅผ ์ฌ์ฉ
- ๋ณดํต async/await ๋ฌธ๋ฒ ์ฌ์ฉ์ ๋ง์ด ์ฌ์ฉํ๋๋ฐ, Promise ๋ฌธ๋ฒ์ ๊ฒฝ์ฐ then ์์ Promise ํธ์ถ ์ ์ฝ๋ฐฑ ์ง์ฅ์ด ๋ฐ์ํ ์ ์์
๐ Promise VS async/await
- ๊ณตํต์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ๋ค
- resolve์ recject ํค์๋๋ก ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํ ๋ฐ์
Promise
- ES6์์ ์ถ๊ฐ๋ ๋ฌธ๋ฒ
- 3๊ฐ์ง ์ํ
- Pending - ๋น๋๊ธฐ ์ฒ๋ฆฌ ์๋ฃ ์
- Fulfilled - ๋น๋๊ธฐ ์ฒ๋ฆฌ ์๋ฃ
- Rejected - ๋น๋๊ธฐ ์ฒ๋ฆฌ ์คํจ
async/await
- ES8์์ ์ถ๊ฐ๋ ๋ฌธ๋ฒ
- Promise๋ฅผ ์ฌ์ฉํ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์กฐ๊ธ ๋ ์ฝ๊ฒ ์ฒ๋ฆฌํด์ฃผ๊ธฐ ์ํด ๋์ด
- await ํค์๋๋ฅผ ํตํด ๋ฐํ ๊ฐ์ ๋ฐ์
- ๋จ์ ์ผ๋ก๋ ์๋ฌ๋ฅผ ํธ๋ค๋งํ ์ ์๋ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ try/catch๋ฅผ ์ฌ์ฉํด์ ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํจ
๐ ํด๋ก์ ธ(Closure)
- ๋ด๋ถ ํจ์๊ฐ ์ธ๋ถ ํจ์์ ๋งฅ๋ฝ(context)์ ์ ๊ทผํ ์ ์๋ ๊ฒ
์ค์ฝํ(Scope)
- ๋ณ์๊ฐ ์ ๊ทผํ ์ ์๋ ๋ฒ์
- ์ ์ญ ์ค์ฝํ(Global Scope) - ์ด๋ ๊ณณ์์๋ ํด๋น ๋ณ์๋ก ์ ๊ทผ์ด ๊ฐ๋ฅ
- ์ง์ญ ์ค์ฝํ(Local Scope) - ํด๋น ์ง์ญ(ํจ์) ๋ด์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅ
ํด๋ก์ ๊ฐ ํ์ํ ์ด์
- ๋ถํ์ํ ์ ์ญ ๋ณ์๋ฅผ ์ค์ฌ์ ์ค์๋ฅผ ๋ฐฉ์งํ๊ณ , ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํจ
๐ var VS let VS const
- ๋ณ์๋ฅผ ์ ์ธํ๋ ๋ฐฉ์
var
- ๋ณ์์ ์ค๋ณต ์ ์ธ์ด ๊ฐ๋ฅํ์ฌ ๋ณ์์ ํ ๋น๋ ๊ฐ์ด ๋ณํ ์ ์๋๋ฐ, ์ด๋ ์ค๋ฅ๋ฅผ ์ถ์ ํ๊ธฐ ํ๋ค์ด์ง
- ํจ์ ์ธ๋ถ์์ ์ ์ธํ ๋ณ์๋ ๋ชจ๋ ์ ์ญ ๋ณ์๋ก ์ทจ๊ธ
- ์์ ๊ฐ์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด let๊ณผ const๊ฐ ๋์ด
let
- ๋ณ์์ ์ค๋ณต ์ ์ธ์ ๋ถ๊ฐ๋ฅํ์ง๋ง, ์ฌํ ๋น์ ๊ฐ๋ฅ
const
- ์ ์ธ๊ณผ ์ด๊ธฐํ๋ฅผ ๋์์ ํด์ผํจ
- ์ฌ์ ์ธ๊ณผ ์ฌํ ๋น์ด ๋ถ๊ฐ๋ฅ
- ์ฃผ์ํด์ผํ ์ ์ ์์ ๊ฐ์ ์ฌํ ๋น์ ๋ถ๊ฐ๋ฅํ์ง๋ง, ๊ฐ์ฒด๋ ๊ฐ๋ฅ
๋ณ์์ ์ค์ฝํ๋ ์ต๋ํ ์ข๊ฒ ์ ์ธ๋๋๋ก ํ๋ ๊ฒ์ด ์ข๋ค.
๐ ๊น์ ๋ณต์ฌ VS ์์ ๋ณต์ฌ
์์ ๋ณต์ฌ (shallow copy)
- ์ฐธ์กฐ์ ์ํ ํ ๋น
- ํด๋น ๋ฐ์ดํฐ์ ์ฐธ์กฐ ๊ฐ(๋ฉ๋ชจ๋ฆฌ ์ฃผ์)๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ๊ฒ
๊น์ ๋ณต์ฌ(deep copy)
- ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๊ทธ๋๋ก ๋ณต์ฌํ์ฌ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์๋ณธ ๋ฐ์ดํฐ๊ฐ ๋ณํ๋ ์ ์๋ ์ํ์ ๋ดํฌํ๊ณ ์์
- ์ฃผ์ํด์ผ ํ ์ ์ 1depth๊น์ง๋ง ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ๋ด๋ถ์ ๊ฐ์ฒด๋ ์์ ๋ณต์ฌ๊ฐ ์ด๋ฃจ์ด์ง
๐ ํ๋กํ ํ์
(Prototype)
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด์งํฅ์ธ์ด
- ๊ฐ์ฒด์งํฅ์ธ์ด์์ ์์์ ๋ฐ๊ธฐ ์ํด ํด๋์ค๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์๋ฐ์คํฌ๋ฆฝํธ๋ ํด๋์ค๋ผ๋ ๊ฐ๋
์ ๊ฐ์ง๊ณ ์์ง ์์.
- ๊ทธ๋์ ํ๋กํ ํ์
์ด ํ์ํจ
- ํ๋กํ ํ์
์ ์ฌ์ฉํ๋ ์ด์ ๋ ์์ ๊ฐ๋
์ ํ์ฉํด ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํจ
๐ ํ์
์คํฌ๋ฆฝํธ
- ๋ง์ดํฌ๋ก์ํํธ(MS)์์ ๊ฐ๋ฐํ ์ธ์ด
- ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ์ ์ธ์ด
์ฌ์ฉ ์ด์
- ์ ์ ํ์
(๋ฏธ๋ฆฌ ํ์
์ ์ง์ )์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ๋จ๊ณ์์ ์ค๋ฅ๋ฅผ ์ก์ ์ ์๋๋ฐ, ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์น๋ช
์ ๋จ์ ์ ๋ณด์ํจ
- ํ์
์ผ ๋ฏธ๋ฆฌ ์ง์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ
- ์ปดํ์ผ ๊ณผ์ ์์ ES6+ ๋ฌธ๋ฒ์ ES5 ํน์ ES3๋ก ๋ณ๊ฒฝํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์
๐ require() VS import()
- ์ธ๋ถ ํ์ผ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๋ํ ๋ ์ฌ์ฉ
require()
const express = require('express');
- ๋ด์ฅ Node.js ํค์๋
- ์ฝ๋์ ์ด๋ ์ง์ ์์๋ ํธ์ถ ๊ฐ๋ฅ
import()
import express from 'express';
- ES6 ๋ชจ๋์์ ๋์
๋ ํค์๋
- ์ฝ๋์ ๋งจ ์๋ง ์คํ ๊ฐ๋ฅ
- from ํค์๋๋ฅผ ํตํด ํ์ํ ๋ชจ๋๋ง ๋ถ๋ฌ์ฌ ์ ์์
๐ ํธ์ด์คํ
- ์ธํฐํ๋ฆฌํฐ๊ฐ ๋ณ์์ ํจ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ธ ์ ์ ๋ฏธ๋ฆฌ ํ ๋นํ๋ ๊ฒ
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณ์๋ ์ ์ธ -> ์ด๊ธฐํ -> ํ ๋น์ ๊ฑฐ์ณ ์์ฑ
var ํค์๋์ ๋ผ์ดํ ์ฌ์ดํด
1. ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ ์ ์ ์ ์ธ ๋ฐ ์ด๊ธฐํ ๋จ๊ณ๋ฅผ ๋์์ ์งํ
2. ์คํ ์ปจํ
์คํธ์ ๋ณ์ ๊ฐ์ฒด๋ฅผ ๋ฑ๋กํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ undefined๋ฅผ ๋ง๋ฆ
๋ณ์์ ๊ฐ์ ํ ๋นํ๊ธฐ ์ ์ ํธ์ถ์ ํ๋ฉด undefined๊ฐ ํธ์ถ ๋จ
๐ TDZ(Temporal Dead Zone)
- ์ ์ธ๊ณผ ์ด๊ธฐํ ๋จ๊ณ์ ์ฌ์ด์์ ๋ฐ์ํ๋ ํ์
let ํค์๋์ ๋ผ์ดํ ์ฌ์ดํด
1. ์ ์ธ ๋จ๊ณ์ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ๋ถ๋ฆฌ๋์ด์ ์งํ
2. ์คํ ์ปจํ
์คํธ์ ๋ณ์๊ฐ ๋ฑ๋ก๋ ์ํ์ด์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ๋์ง ์์ ์ฐธ์กฐ ์๋ฌ(ReferenceError)๊ฐ ๋ฐ์
์คํ ์ปจํ
์คํธ์ ๋ฑ๋ก๋จ (ํธ์ด์คํ
)
-> TDZ ๊ตฌ๊ฐ์ ์ํด ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ๋์ง ์์ ์ฐธ์กฐ ์๋ฌ๊ฐ ๋ฐ์
๐ ์ฐธ๊ณ ๋ํผ๋ฐ์ค