Search
Duplicate

ECMAScript

ECMAScript

ECMAScript๋Š” ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์ธ JavaScript์˜ ํ‘œ์ค€ ๊ทœ๊ฒฉ์„ ์ •์˜ํ•˜๋Š” ๊ทœ๊ฒฉ์ž…๋‹ˆ๋‹ค.
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ด๋ฆ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด๋„ ์ข‹์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ, ECMAScript๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ์ ์ธ ๋™์ž‘, ๋ฐ์ดํ„ฐ ํƒ€์ž…, ๊ฐ์ฒด, ๋ฌธ๋ฒ• ๋“ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ €์™€ JavaScript ์—”์ง„์€ ECMAScript ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋ฉฐ, ์ƒˆ๋กœ์šด ECMAScript ๋ฒ„์ „์ด ๋‚˜์˜ฌ ๋•Œ๋งˆ๋‹ค ์ด๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์™€ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ตœ์‹ ์˜ ์–ธ์–ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
ECMAScript ํ†ตํ•ด JavaSscript ์–ธ์–ด์˜ ํ‘œ์ค€์„ ์ •์˜ํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €(chrome, edge, firefox ๋“ฑ) ๋ฐ JavaScript ์—”์ง„์ด ์ด์— ๋งž์ถฐ ๊ฐ๊ฐ ๋ธŒ๋ผ์šฐ์ €์™€ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ ECMAScript ๋ผ๋Š” ํ‘œ์ค€์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ์ค€์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๊ฐœ๋ฐœ์ž๋“ค์˜ ๋ธŒ๋ผ์šฐ์ € ๋ฐ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์„ ํ†ตํ•ด, ECMAScript ํ‘œ์ค€์— ๋”ฐ๋ฅธ JavaScript ์–ธ์–ด์˜ ์ตœ์‹  ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ? : ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์˜ ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋  ๋•Œ, ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”๋กœ ํ•˜๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฆฌ์†Œ์Šค์™€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ™˜๊ฒฝ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰๋˜๋Š” JavaScript๋Š” ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ ๋Ÿฐํƒ€์ž„์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ด ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์€ DOM(Document Object Model)์— ์ ‘๊ทผํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ € ์ด๋ฒคํŠธ์— ๋Œ€์‘ํ•˜๋ฉฐ, ์›น ํŽ˜์ด์ง€์˜ ์š”์†Œ๋“ค๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋˜ํ•œ, Node.js๋Š” ์„œ๋ฒ„ ์ธก์—์„œ JavaScript๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ECMAScript ๋ฒ„์ „

๋ฒ„์ „
๋ฐœํ‘œ ์—ฐ๋„
์ฃผ์š” ๋ณ€๊ฒฝ ๋ฐ ๋„์ž…๋œ ๊ธฐ๋Šฅ
ES1 (ECMAScript 1)
1997
์ดˆ๊ธฐ ECMAScript ํ‘œ์ค€ ์ •์˜
ES2 (ECMAScript 2)
1998
ES1 ์ˆ˜์ • ๋ฐ ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๋„์ž…
ES3 (ECMAScript 3)
1999
์•ˆ์ •์ ์ธ ๊ธฐ๋Šฅ ๋„์ž…, ์ •๊ทœํ‘œํ˜„์‹, try/catch ๋“ฑ ์ถ”๊ฐ€
ES4 (ECMAScript 4)
-
๊ฐœ๋ฐœ ์ค‘๋‹จ, ์‹ค์ œ๋กœ๋Š” ์ฑ„ํƒ๋˜์ง€ ์•Š์Œ
ES5 (ECMAScript 5)
2009
์—„๊ฒฉ ๋ชจ๋“œ, JSON ๊ฐ์ฒด, ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ ๋“ฑ ๋„์ž…
ES5.1 (ECMAScript 5.1)
-
ES5์˜ ๋ช‡ ๊ฐ€์ง€ ์˜ค๋ฅ˜ ์ˆ˜์ • ๋ฐ ๋ณด์ •ํŒ
ES6 (ECMAScript 2015)
2015
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜, ํด๋ž˜์Šค, ๋ชจ๋“ˆ ๋“ฑ ๋„์ž…
ES7 (ECMAScript 2016)
-
์ฃผ์š” ๋ณ€๊ฒฝ ์—†์ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€, async/await ๋“ฑ
ES8 (ECMAScript 2017)
-
async/await, Object.values(), Object.entries() ๋“ฑ ๋„์ž…
ES9 (ECMAScript 2018)
-
๋ ˆ์ŠคํŠธ/์Šคํ”„๋ ˆ๋“œ ํ”„๋กœํผํ‹ฐ, ๋น„๋™๊ธฐ ๋ฐ˜๋ณต์ž, ์ •๊ทœํ‘œํ˜„์‹์˜ ํ›„ํ–‰ ์—ฐ๊ฒฐ์ž ๋“ฑ ๋„์ž…
ES10 (ECMAScript 2019)
-
Array.prototype.flat(), Array.prototype.flatMap(), Object.fromEntries() ๋“ฑ ๋„์ž…
ES11 (ECMAScript 2020)
-
BigInt, ๋™์  import(), globalThis, Promise.allSettled() ๋“ฑ ๋„์ž…
ES12 (ECMAScript 2021)
-
String.prototype.replaceAll(), ๋…ผ๋ฆฌ์  ํ• ๋‹น ์—ฐ์‚ฐ์ž

ES6 (ECMAScript 2015)

2015๋…„์— ํ‘œ์ค€์œผ๋กœ ์ฑ„ํƒ๋œ ECMAScript ๋ฒ„์ „์€ JavaScript ์–ธ์–ด์— ๋งŽ์€ ํ˜์‹ ๊ณผ ๋ณ€ํ™”๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ES6๋Š” ์ด์ „ ๋ฒ„์ „์— ๋น„ํ•ด ๋งŽ์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•˜์—ฌ JavaScript ์ฝ”๋“œ๋ฅผ ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

ES6 ์ฃผ์š” ๋ฌธ๋ฒ•

์ฃผ์š” ๊ธฐ์ˆ 
์„ค๋ช…
const์™€ let
๋ธ”๋ก ์Šค์ฝ”ํ”„ ๋ณ€์ˆ˜๋ฅผ ๋„์ž…ํ•˜๋ฉฐ, const๋Š” ์žฌํ• ๋‹น ๋ถˆ๊ฐ€, let์€ ์žฌํ• ๋‹น ๊ฐ€๋Šฅ
ํ…œํ”Œ๋ฆฟ ๋ฌธ์ž์—ด
๋ฐฑํ‹ฑ(`)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ€ํ‹ฐ๋ผ์ธ ๋ฌธ์ž์—ด ๋ฐ ๋ณ€์ˆ˜ ์‚ฝ์ž…์ด ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์—ด
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
ํ•จ์ˆ˜๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜
ํ•จ์ˆ˜ ์ •์˜์—์„œ ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋ณ€ ์ธ์ž ์ฒ˜๋ฆฌ
์ „๊ฐœ ์—ฐ์‚ฐ์ž
๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด๋ฅผ ํ’€์–ด์„œ ์ „๊ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์ž
forEach(), map(), reduce()
๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๊ณ  ๋ณ€ํ˜• ๋˜๋Š” ์ถ•์†Œํ•˜๋Š” ๋ฉ”์„œ๋“œ
๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด (ํ–ฅ์ƒ๋œ ๊ฐ์ฒด ๋ฌธ๋ฒ•)
์†์„ฑ์˜ ์ถ•์•ฝ ๋ฌธ๋ฒ•, ๊ณ„์‚ฐ๋œ ์†์„ฑ ์ด๋ฆ„, ๋ฉ”์„œ๋“œ ์ถ•์•ฝ ๋“ฑ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์˜ ๊ฐœ์„ 
๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น
๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์—์„œ ์›ํ•˜๋Š” ๊ฐ’์„ ์ถ”์ถœํ•˜์—ฌ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น
ํด๋ž˜์Šค
๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๋Š” ํด๋ž˜์Šค
ํ”„๋กœ๋ฏธ์Šค
๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” Promise ๊ฐ์ฒด
async/await
๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” async ํ•จ์ˆ˜์™€ await ํ‚ค์›Œ๋“œ
Map/Set
Map๊ณผ Set ์ปฌ๋ ‰์…˜์„ ๋„์ž…ํ•˜์—ฌ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ œ๊ณต
NULL ๋ณ‘ํ•ฉ
null ๋˜๋Š” undefined๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ?? ์—ฐ์‚ฐ์ž
์˜ต์…”๋„ ์ฒด์ด๋‹
?. ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด์˜ ์†์„ฑ์— ์ ‘๊ทผํ•  ๋•Œ undefined ๋˜๋Š” null์ธ ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฐฉ์ง€
๋ชจ๋“ˆ import, export
์ฝ”๋“œ๋ฅผ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

const, let:

โ€ข
const์™€ let์€ ๋ธ”๋ก ์Šค์ฝ”ํ”„ ๋ณ€์ˆ˜๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. const๋Š” ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , let์€ ์žฌํ• ๋‹น์ด ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.
์„ ์–ธ ํ‚ค์›Œ๋“œ
์„ค๋ช…
var
์ดˆ๊ธฐ~ES5 ๊นŒ์ง€ ์‚ฌ์šฉํ•˜๋˜ ๋ณ€์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ
let
ES6 ๋ถ€ํ„ฐ ๋„์ž…๋œ ๋ณ€์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ
const
ES6 ๋ถ€ํ„ฐ ๋„์ž…๋œ ์ƒ์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ

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

ํŠน์„ฑ
var
let
์Šค์ฝ”ํ”„
ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„
๋ธ”๋ก ์Šค์ฝ”ํ”„
ํ˜ธ์ด์ŠคํŒ…
๋ฐœ์ƒํ•จ
๋ฐœ์ƒํ•จ
์žฌํ• ๋‹น ๊ฐ€๋Šฅ
๊ฐ€๋Šฅ
๊ฐ€๋Šฅ
์žฌ์„ ์–ธ ๊ฐ€๋Šฅ
๊ฐ€๋Šฅ
๋ถˆ๊ฐ€๋Šฅ
์ดˆ๊ธฐํ™” ํ•„์š”
ํ•„์š”ํ•˜์ง€ ์•Š์Œ
ํ•„์š”
1.
์Šค์ฝ”ํ”„:
โ€ข
var๋Š” ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ํ•จ์ˆ˜ ๋‚ด์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.
โ€ข
let์€ ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ค‘๊ด„ํ˜ธ({}) ๋‚ด์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๊ทธ ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.
2.
ํ˜ธ์ด์ŠคํŒ…:
โ€ข
var์™€ let์€ ๋ชจ๋‘ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜๊ธฐ ์ „์— ์ฐธ์กฐํ•˜๋ฉด undefined๋กœ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
3.
์žฌํ• ๋‹น ๊ฐ€๋Šฅ:
โ€ข
var์™€ let์€ ๋ชจ๋‘ ๋ณ€์ˆ˜์— ๊ฐ’์„ ์žฌํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
4.
์žฌ์„ ์–ธ ๊ฐ€๋Šฅ:
โ€ข
var๋Š” ๊ฐ™์€ ์Šค์ฝ”ํ”„ ๋‚ด์—์„œ ๋ณ€์ˆ˜๋ฅผ ์žฌ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
let์€ ๊ฐ™์€ ์Šค์ฝ”ํ”„ ๋‚ด์—์„œ ๋ณ€์ˆ˜๋ฅผ ์žฌ์„ ์–ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
5.
์ดˆ๊ธฐํ™” ํ•„์š”:
โ€ข
var๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ ์ดˆ๊ธฐํ™”๊ฐ€ ํ•„์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์œผ๋ฉด undefined๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
โ€ข
let์€ ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ ์ดˆ๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™” ์—†์ด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ˜ธ์ด์ŠคํŒ… (Hoisting)

: โ€œ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐโ€ (์˜์–ด ๋œป)
โ€ข
JavaScript์—์„œ ๋ณ€์ˆ˜ ๋ฐ ํ•จ์ˆ˜ ์„ ์–ธ์ด ์Šค์ฝ”ํ”„ ๋‚ด์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€๋Š” ํ˜„์ƒ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์šฉ์–ด์ž…๋‹ˆ๋‹ค.
โ€ข
var ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด, ํ˜ธ์ด์ŠคํŒ…(๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ)๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ํ•จ์ˆ˜ ๋‚ด ์–ด๋””์—์„œ๋“  ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

var ์™€ let ์˜ ํ˜ธ์ด์ŠคํŒ…์œผ๋กœ ์ธํ•œ ์ฐจ์ด

function example() { console.log(a); // ์ถœ๋ ฅ: undefined (ํ˜ธ์ด์ŠคํŒ…) var a = 10; console.log(a); // ์ถœ๋ ฅ: 10 } function exampleLet() { // console.log(b); // ์—๋Ÿฌ: ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Œ let b = 20; console.log(b); // ์ถœ๋ ฅ: 20 } example(); exampleLet();
JavaScript
๋ณต์‚ฌ

var ์™€ let ์˜ scope ์ฐจ์ด

โ€ข
var : ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„
โ€ข
let : ๋ธ”๋ก ์Šค์ฝ”ํ”„
โ€ข
var์˜ ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„:
function exampleVar() { if (true) { var x = 10; } console.log(x); // ์ถœ๋ ฅ: 10 } exampleVar();
JavaScript
๋ณต์‚ฌ
โ€ข
let์˜ ๋ธ”๋ก ์Šค์ฝ”ํ”„
function exampleLet() { if (true) { let y = 20; } // console.log(y); // ์—๋Ÿฌ: ๋ธ”๋ก ์Šค์ฝ”ํ”„ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†์Œ } exampleLet();
JavaScript
๋ณต์‚ฌ

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

โ€ข
๋ฐฑํ‹ฑ(`)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ€ํ‹ฐ๋ผ์ธ ๋ฌธ์ž์—ด ๋ฐ ๋ณ€์ˆ˜ ์‚ฝ์ž…์ด ๊ฐ€๋Šฅํ•œ ํ…œํ”Œ๋ฆฟ ๋ฌธ์ž์—ด์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ ๋ฌธ์ž์—ด(Template Strings)

: ๋ฌธ์ž์—ด์„ ๋ณด๋‹ค ๊ฐ„ํŽธํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” JavaScript์˜ ๋ฌธ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐฑํ‹ฑ(backtick) (`)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๊ฐ์‹ธ๊ณ , ๋ณ€์ˆ˜ ๋˜๋Š” ํ‘œํ˜„์‹์„ ${} ์•ˆ์— ๋„ฃ์–ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
โ€ข
ํ…œํ”Œ๋ฆฟ ๋ฌธ์ž์—ด ์‚ฌ์šฉ ์˜ˆ์‹œ
const name = 'aloha'; const age = 20; // ํ…œํ”Œ๋ฆฟ ๋ฌธ์ž์—ด ์‚ฌ์šฉ const greeting = `Hello, ${name}! You are ${age} years old.`; console.log(greeting);
JavaScript
๋ณต์‚ฌ

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

โ€ข
ํ•จ์ˆ˜๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜(Arrow Function)

: function ํ‚ค์›Œ๋“œ ๋Œ€์‹  =>๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•œ ์ต๋ช… ํ•จ์ˆ˜
โ€ข
์ต๋ช… ํ•จ์ˆ˜ ์˜ˆ์‹œ ์ฝ”๋“œ
// ์ต๋ช… ํ•จ์ˆ˜ const sum = function (a, b) { return a + b; }; console.log(sum(2, 3)); // ์ถœ๋ ฅ: 5
JavaScript
๋ณต์‚ฌ
โ€ข
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ ์˜ˆ์‹œ ์ฝ”๋“œ
// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ const sumArrow = (a, b) => { return a + b; }; console.log(sumArrow(2, 3)); // ์ถœ๋ ฅ: 5
JavaScript
๋ณต์‚ฌ

์ต๋ช…ํ•จ์ˆ˜์™€ ํ™”์‚ดํ‘œํ•จ์ˆ˜์˜ ๋น„๊ต

ํŠน์„ฑ
์ต๋ช… ํ•จ์ˆ˜
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
๊ตฌ๋ฌธ
function (param1, param2, ...) { }
(param1, param2, ...) => { }
this ๋™์ž‘
์ƒˆ๋กœ์šด this ์ƒ์„ฑ
์ฃผ๋ณ€ ์Šค์ฝ”ํ”„์—์„œ this ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉ
arguments ์‚ฌ์šฉ
์‚ฌ์šฉ ๊ฐ€๋Šฅ
์‚ฌ์šฉ ๋ถˆ๊ฐ€ (๋Œ€์‹  ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ)
์ƒ์„ฑ์ž๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
๊ฐ€๋Šฅ
๋ถˆ๊ฐ€๋Šฅ
ํ˜ธ์ด์ŠคํŒ…
ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•จ
ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•จ
return ํ‚ค์›Œ๋“œ ์ƒ๋žต
๊ฐ€๋Šฅ
๊ฐ€๋Šฅ (๋‹จ์ผ ํ‘œํ˜„์‹์˜ ๊ฒฝ์šฐ)

arguments

: arguments๋Š” ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ธ์ž๋“ค์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
โ€ข
์ผ๋ฐ˜ ํ•จ์ˆ˜ (์ต๋ช… ํ•จ์ˆ˜)์—์„œ arguments ์‚ฌ์šฉ
function regularFunction() { console.log(arguments); } regularFunction(1, 'hello', true);
JavaScript
๋ณต์‚ฌ
์ถœ๋ ฅ
Arguments(3) [1, "hello", true, callee: (...), Symbol(Symbol.iterator): ฦ’]
JavaScript
๋ณต์‚ฌ
โ€ข
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ arguments ์‚ฌ์šฉ ๋ถˆ๊ฐ€
const arrowFunction = () => { // console.log(arguments); // ์—๋Ÿฌ: arguments๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ }; arrowFunction(1, 'hello', true);
JavaScript
๋ณต์‚ฌ

๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜

โ€ข
ํ•จ์ˆ˜ ์ •์˜์—์„œ ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋ณ€ ์ธ์ž๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜

: ์ „๋‹ฌ์ธ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ€๋ณ€์ ์œผ๋กœ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜

์ „๊ฐœ ์—ฐ์‚ฐ์ž

โ€ข
๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด๋ฅผ ํ’€์–ด์„œ ์ „๊ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์ „๊ฐœ ์—ฐ์‚ฐ์ž๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ „๊ฐœ ์—ฐ์‚ฐ์ž

: ๋ฐฐ์—ด์„ ์ „๊ฐœํ•ด์„œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•ด์ฃผ๋Š” ์—ฐ์‚ฐ์ž

forEach(), map(), reduce()

โ€ข
๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๊ณ  ๋ณ€ํ˜• ๋˜๋Š” ์ถ•์†Œํ•˜๋Š” ๋ฉ”์„œ๋“œ์ธ forEach(), map(), reduce() ๋“ฑ์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

forEach()

forEach() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ˜๋ณต๋ฌธ ๋Œ€์‹  ์‚ฌ์šฉ๋˜๋ฉฐ, ์š”์†Œ์— ๋Œ€ํ•œ ๋ฐ˜๋ณต ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋ฌธ๋ฒ•
const array = [1, 2, 3, 4, 5] array.forEach(callback(currentValue, index, array) { // ์ž‘์—… ์ˆ˜ํ–‰ }, thisArg);
JavaScript
๋ณต์‚ฌ
1.
currentValue: ํ˜„์žฌ ๋ฐ˜๋ณต ์ค‘์ธ ๋ฐฐ์—ด ์š”์†Œ์˜ ๊ฐ’.
2.
index: ํ˜„์žฌ ๋ฐ˜๋ณต ์ค‘์ธ ๋ฐฐ์—ด ์š”์†Œ์˜ ์ธ๋ฑ์Šค.
3.
array: forEach()๊ฐ€ ํ˜ธ์ถœ๋œ ๋ฐฐ์—ด ์ž์ฒด.
โ€ข
์˜ˆ์‹œ ์ฝ”๋“œ
const numbers = [1, 2, 3, 4, 5]; numbers.forEach((number, index) => { console.log(`Element at index ${index}: ${number}`); });
JavaScript
๋ณต์‚ฌ

map()

map() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋ฌธ๋ฒ•
const array = [1, 2, 3, 4, 5] const newArray = array.map(callback(currentValue, index, array) { // ๋ณ€ํ˜• ์ž‘์—… ์ˆ˜ํ–‰ }, thisArg);
JavaScript
๋ณต์‚ฌ
1.
currentValue: ํ˜„์žฌ ๋ฐ˜๋ณต ์ค‘์ธ ๋ฐฐ์—ด ์š”์†Œ์˜ ๊ฐ’.
2.
index: ํ˜„์žฌ ๋ฐ˜๋ณต ์ค‘์ธ ๋ฐฐ์—ด ์š”์†Œ์˜ ์ธ๋ฑ์Šค.
3.
array: forEach()๊ฐ€ ํ˜ธ์ถœ๋œ ๋ฐฐ์—ด ์ž์ฒด.
โ€ข
์˜ˆ์‹œ ์ฝ”๋“œ
const numbers = [1, 2, 3, 4, 5]; const squared = numbers.map((number) => { return number * number; }); console.log(squared); // ์ถœ๋ ฅ: [1, 4, 9, 16, 25]
JavaScript
๋ณต์‚ฌ

reduce()

reduce() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ํ•˜๋‚˜์˜ ๋ˆ„์ ๋œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ์ถ•์†Œํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
โ€ข
๋ฌธ๋ฒ•
const array = [1, 2, 3, 4, 5] const result = array.reduce(callback(accumulator, currentValue, index, array) { // ์ถ•์  ์ž‘์—… ์ˆ˜ํ–‰ }, initialValue);
JavaScript
๋ณต์‚ฌ
1.
accumulator: ๋ˆ„์ ๋œ ๊ฐ’์œผ๋กœ, ๊ฐ ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ๋ˆ„์ ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜.
2.
currentValue: ํ˜„์žฌ ๋ฐ˜๋ณต ์ค‘์ธ ๋ฐฐ์—ด ์š”์†Œ์˜ ๊ฐ’.
3.
index: ํ˜„์žฌ ๋ฐ˜๋ณต ์ค‘์ธ ๋ฐฐ์—ด ์š”์†Œ์˜ ์ธ๋ฑ์Šค.
4.
array: reduce()๊ฐ€ ํ˜ธ์ถœ๋œ ๋ฐฐ์—ด ์ž์ฒด.
5.
initialValue: ๋ˆ„์  ๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐ๊ฐ’.
โ€ข
์˜ˆ์‹œ ์ฝ”๋“œ
const numbers = [1, 2, 3, 4, 5]; const sum = numbers.reduce((accumulator, number) => { return accumulator + number; }, 0); console.log(sum); // ์ถœ๋ ฅ: 15
JavaScript
๋ณต์‚ฌ

๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด (ํ–ฅ์ƒ๋œ ๊ฐ์ฒด ๋ฌธ๋ฒ•)

โ€ข
๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์—์„œ ์†์„ฑ์˜ ์ถ•์•ฝ ๋ฌธ๋ฒ•, ๊ณ„์‚ฐ๋œ ์†์„ฑ ์ด๋ฆ„, ๋ฉ”์„œ๋“œ ์ถ•์•ฝ ๋“ฑ์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
โ€ข
์†์„ฑ ์ถ•์•ฝ
โ€ข
๊ณ„์‚ฐ๋œ ์†์„ฑ๋ช…
โ€ข
๋ฉ”์„œ๋“œ์ถ•์•ฝ

์†์„ฑ ์ถ•์•ฝ

๊ธฐ์กด์—๋Š” ๋ณ€์ˆ˜์™€ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์†์„ฑ์„ ๋งŒ๋“ค ๋•Œ, ์ด๋ฆ„์„ ๋ฐ˜๋ณตํ•ด์„œ ์ž‘์„ฑํ•ด์•ผ ํ–ˆ์ง€๋งŒ, ํ–ฅ์ƒ๋œ ๊ฐ์ฒด ๋ฌธ๋ฒ•์—์„œ๋Š” ๋ณ€์ˆ˜ ์ด๋ฆ„๋งŒ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
โ€ข
์˜ˆ์‹œ ์ฝ”๋“œ
const name = 'aloha'; const age = 20; // ๊ธฐ์กด ๋ฐฉ์‹ const person1 = { name: name, age: age }; // ํ–ฅ์ƒ๋œ ๊ฐ์ฒด ๋ฌธ๋ฒ• const person2 = { name, age }; console.log(person1); // { name: 'aloha', age: 20 } console.log(person2); // { name: 'aloha', age: 20 }
JavaScript
๋ณต์‚ฌ

๊ณ„์‚ฐ๋œ ์†์„ฑ๋ช…

์†์„ฑ ์ด๋ฆ„์„ ๋™์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜์—ฌ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
์˜ˆ์‹œ ์ฝ”๋“œ
const key = 'gender'; const person = { name: 'aloha', age: 25, [key]: 'female' }; console.log(person); // { name: 'aloha', age: 25, gender: 'female' }
JavaScript
๋ณต์‚ฌ

๋ฉ”์„œ๋“œ ์ถ•์•ฝ

๋ฉ”์„œ๋“œ๋ฅผ ์ข€ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
์˜ˆ์‹œ ์ฝ”๋“œ
// ๊ธฐ์กด ๋ฐฉ์‹ const obj1 = { method1: function() { // ๋ฉ”์„œ๋“œ ๋กœ์ง } }; // ํ–ฅ์ƒ๋œ ๊ฐ์ฒด ๋ฌธ๋ฒ• const obj2 = { method1() { // ๋ฉ”์„œ๋“œ ๋กœ์ง } };
JavaScript
๋ณต์‚ฌ

๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

โ€ข
๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์—์„œ ์›ํ•˜๋Š” ๊ฐ’์„ ์ถ”์ถœํ•˜์—ฌ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

: ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ํ•ด์ฒดํ•˜์—ฌ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฐ’์„ ์‰ฝ๊ฒŒ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
๋ฐฐ์—ด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น
โ€ข
๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น
โ€ข
๋งค๊ฐœ๋ณ€์ˆ˜ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

๋ฐฐ์—ด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

โ€ข
๋ฌธ๋ฒ•
const [variable1, variable2, ...rest] = array;
JavaScript
๋ณต์‚ฌ
โ€ข
์˜ˆ์‹œ ์ฝ”๋“œ
const numbers = [1, 2, 3, 4, 5]; // ๋ฐฐ์—ด์˜ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น const [first, second, ...rest] = numbers; console.log(first); // ์ถœ๋ ฅ: 1 console.log(second); // ์ถœ๋ ฅ: 2 console.log(rest); // ์ถœ๋ ฅ: [3, 4, 5]
JavaScript
๋ณต์‚ฌ

๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

โ€ข
๋ฌธ๋ฒ•
const { property1, property2, ...rest } = object;
JavaScript
๋ณต์‚ฌ
โ€ข
์˜ˆ์‹œ ์ฝ”๋“œ
const person = { name: 'aloha', age: 25, gender: 'female' }; // ๊ฐ์ฒด์˜ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น const { name, age, ...rest } = person; console.log(name); // ์ถœ๋ ฅ: 'aloha' console.log(age); // ์ถœ๋ ฅ: 25 console.log(rest); // ์ถœ๋ ฅ: { gender: 'female' }
JavaScript
๋ณต์‚ฌ

๋งค๊ฐœ๋ณ€์ˆ˜ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

โ€ข
๋ฌธ๋ฒ•
// ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ์˜ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น function functionName({ param1, param2, param3}) { console.log(`param1: ${param1}, param2: ${param2}, param3: ${param3}`); } const params = { param1: 1, param2: 2, param3: 3 }; functionName(params);
JavaScript
๋ณต์‚ฌ
โ€ข
์˜ˆ์‹œ ์ฝ”๋“œ
// ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ์˜ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น function printPersonInfo({ name, age, gender }) { console.log(`Name: ${name}, Age: ${age}, Gender: ${gender}`); } const person = { name: 'aloha', age: 20, gender: 'male' }; printPersonInfo(person); // ์ถœ๋ ฅ: Name: aloha, Age: 20, Gender: male
JavaScript
๋ณต์‚ฌ

ํด๋ž˜์Šค

โ€ข
๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํด๋ž˜์Šค๋ž€?

: ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ  ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ๋ฒ•

๊ฐ์ฒด๋ž€?

: ๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ์„ ์†์„ฑ๊ณผ ๋ฉ”์†Œ๋“œ๋กœ ์ •์˜ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฌธ๋ฒ•

ํด๋ž˜์Šค

ํด๋ž˜์Šค๋Š” class ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค. ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
๋ฌธ๋ฒ•
class ClassName { constructor() { // ์ƒ์„ฑ์ž } // ๋ฉ”์„œ๋“œ ์ •์˜ methodName() { // ๋ฉ”์„œ๋“œ ๋กœ์ง } }
JavaScript
๋ณต์‚ฌ
โ€ข
์˜ˆ์‹œ ์ฝ”๋“œ
class Animal { constructor(name, sound) { this.name = name; this.sound = sound; } makeSound() { console.log(`${this.name} says ${this.sound}`); } } // ์ƒ์†์„ ์ด์šฉํ•œ ์„œ๋ธŒํด๋ž˜์Šค ์ •์˜ class Dog extends Animal { constructor(name) { // ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ํ˜ธ์ถœ super(name, 'Woof'); } } // ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•œ ๊ฐ์ฒด ์ƒ์„ฑ const cat = new Animal('Cat', 'Meow'); const dog = new Dog('Dog'); // ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ cat.makeSound(); // ์ถœ๋ ฅ: Cat says Meow dog.makeSound(); // ์ถœ๋ ฅ: Dog says Woof
JavaScript
๋ณต์‚ฌ

ํ”„๋กœ๋ฏธ์Šค (Promise)

โ€ข
๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” Promise ๊ฐ์ฒด๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

: ํ”„๋กœ๋ฏธ์Šค๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์„ฑ๊ณต ๋˜๋Š” ์‹คํŒจ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด
โ€ข
๋ฌธ๋ฒ•
// ํ”„๋กœ๋ฏธ์Šค ์ƒ์„ฑ const myPromise = new Promise((resolve, reject) => { // ๋น„๋™๊ธฐ ์ž‘์—… ์ˆ˜ํ–‰ const success = true; if (success) { resolve('Success result'); } else { reject('Error message'); } }); // ํ”„๋กœ๋ฏธ์Šค ์‚ฌ์šฉ myPromise .then((result) => { console.log(result); // ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋œ ๊ฒฝ์šฐ์˜ ์ฒ˜๋ฆฌ }) .catch((error) => { console.error(error); // ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์˜ ์ฒ˜๋ฆฌ });
JavaScript
๋ณต์‚ฌ
1.
ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด ์ƒ์„ฑ : new Promise( (resolve, reject) โ‡’ { } )
2.
ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด ์ƒ์„ฑ์˜ ์ธ์ž๋กœ ์ •์˜ํ•œ ์ฝœ๋ฐฑํ•จ์ˆ˜ ์•ˆ์—์„œ resovle() ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ํ”„๋กœ๋ฏธ์Šค ์‚ฌ์šฉ ์‹œ then() ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
3.
๋ฐ˜๋Œ€๋กœ ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ์ •์˜ํ•œ ์ฝœ๋ฐฑํ•จ์ˆ˜ ์•ˆ์—์„œ reject() ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ํ”„๋กœ๋ฏธ์Šค ์‚ฌ์šฉ ์‹œ catch() ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
โ€ข
์˜ˆ์‹œ ์ฝ”๋“œ
// ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์‚ฌ์šฉํ•œ ํƒ€์ด๋จธ ์˜ˆ์‹œ ์ฝ”๋“œ function delay(ms) { return new Promise((resolve, reject) => { // setTimeout ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ž‘์—… ๋ชจ๋ฐฉ setTimeout(() => { // ms ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„, resolve๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ”„๋กœ๋ฏธ์Šค ์ดํ–‰ resolve(`Waited for ${ms} milliseconds`); }, ms); }); } // ํ”„๋กœ๋ฏธ์Šค๋ฅผ ์ด์šฉํ•œ ํƒ€์ด๋จธ ์‚ฌ์šฉ delay(2000) // 2์ดˆ ๋™์•ˆ ๊ธฐ๋‹ค๋ฆผ .then((result) => { console.log(result); // ์ถœ๋ ฅ: 'Waited for 2000 milliseconds' // ์ดํ›„์˜ ์ž‘์—…์„ ์ด์–ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ }) .catch((error) => { console.error(error); // ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ });
JavaScript
๋ณต์‚ฌ

async/await

โ€ข
๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” async ํ•จ์ˆ˜์™€ await ํ‚ค์›Œ๋“œ๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

async/await

: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ๋ฒ•

async ํ•จ์ˆ˜:

async ํ•จ์ˆ˜๋Š” ๋น„๋™๊ธฐ์ ์ธ ๋™์ž‘์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜ ๋‚ด์—์„œ await๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
async function sample() { // ๋น„๋™๊ธฐ ์ž‘์—… const result = await test(); console.log(result); }
JavaScript
๋ณต์‚ฌ

await ํ‚ค์›Œ๋“œ:

await ํ‚ค์›Œ๋“œ๋Š” async ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ์ดํ–‰๋  ๋•Œ๊นŒ์ง€ ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘๋‹จํ•˜๊ณ  ํ”„๋กœ๋ฏธ์Šค์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
async function fetchData() { const response = await fetch('https://httpbin.org/get'); const data = await response.json(); return data; } fetchData() .then((result) => { console.log(result); }) .catch((error) => { console.log(error); })
JavaScript
๋ณต์‚ฌ

Map/Set

โ€ข
Map๊ณผ Set ์ปฌ๋ ‰์…˜์„ ๋„์ž…ํ•˜์—ฌ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

Map

ํ‚ค-๊ฐ’ ์Œ์„ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ
โ€ข
ํ‚ค์™€ ๊ฐ’์€ ๋ชจ๋‘ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
โ€ข
Map ์ƒ์„ฑ, ํ‚ค-๊ฐ’ ์ง€์ •, ๊ฐ’ ์‚ฌ์šฉ
const map = new Map() map.set('key1', 'value1') map.set('key2', 'value2') map.set('key3', 'value3') console.log(map); console.log(map.get('key1')); console.log(map.get('key2')); console.log(map.get('key3')); // ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ Map ์ƒ์„ฑ const map2 = new Map([ ['key1', 'value1'], ['key2', 'value2'] ]); console.log(map2);
JavaScript
๋ณต์‚ฌ
โ€ข
Map ๋ฐ˜๋ณต
map.forEach((value, key) => { console.log(`${key}: ${value}`); }); // Map์˜ ํ‚ค ์ˆœํšŒ for (const key of map.keys()) { console.log(key); } // Map์˜ ๊ฐ’ ์ˆœํšŒ for (const value of map.values()) { console.log(value); } // Map์˜ ํ•ญ๋ชฉ(ํ‚ค-๊ฐ’ ์Œ) ์ˆœํšŒ for (const [key, value] of map.entries()) { console.log(`${key}: ${value}`); }
JavaScript
๋ณต์‚ฌ

Set

์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ , ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ์›์†Œ๋“ค์˜ ์ปฌ๋ ‰์…˜์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ
โ€ข
Set์˜ ์ƒ์„ฑ๊ณผ ๊ธฐ๋ณธ ์‚ฌ์šฉ
// Set ์ƒ์„ฑ const set = new Set(); // ์›์†Œ ์ถ”๊ฐ€ set.add('value1'); set.add('value2'); // ์›์†Œ ์กฐํšŒ console.log(set.has('value1')); // ์ถœ๋ ฅ: true // ์›์†Œ ์‚ญ์ œ set.delete('value1'); // Set ํฌ๊ธฐ ํ™•์ธ console.log(set.size); // ์ถœ๋ ฅ: 1 // ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ Set ์ƒ์„ฑ const set2 = new Set(['value1', 'value2']); console.log(set2);
JavaScript
๋ณต์‚ฌ
โ€ข
Set์˜ ๋ฐ˜๋ณต
// Set ์ˆœํšŒ set2.forEach((value) => { console.log(value); }); // Set์˜ ์›์†Œ ์ˆœํšŒ for (const value of set2) { console.log(value); }
JavaScript
๋ณต์‚ฌ

NULL ๋ณ‘ํ•ฉ

โ€ข
null ๋˜๋Š” undefined๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ?? (nullish coalescing) ์—ฐ์‚ฐ์ž๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

NULL ๋ณ‘ํ•ฉ

๋ณ€์ˆ˜๊ฐ€ null ๋˜๋Š” undefined์ธ ๊ฒฝ์šฐ์— ๋Œ€์ฒด๊ฐ’์„ ์ œ๊ณตํ•˜๋Š” ์—ฐ์‚ฐ์ž
โ€ข
๋ฌธ๋ฒ•
const result = ๋ณ€์ˆ˜ ?? ๋Œ€์ฒด๊ฐ’(๊ธฐ๋ณธ๊ฐ’);
JavaScript
๋ณต์‚ฌ
โ€ข
์˜ˆ์‹œ ์ฝ”๋“œ
// ๋ณ€์ˆ˜๊ฐ€ null ๋˜๋Š” undefined์ธ ๊ฒฝ์šฐ์— ๋Œ€์ฒด๊ฐ’ ์‚ฌ์šฉ const userInput = null; const username = userInput ?? 'Guest'; console.log(username); // ์ถœ๋ ฅ: 'Guest'
JavaScript
๋ณต์‚ฌ

์˜ต์…”๋„ ์ฒด์ด๋‹

โ€ข
?. ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด์˜ ์†์„ฑ์— ์ ‘๊ทผํ•  ๋•Œ undefined ๋˜๋Š” null์ธ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ์˜ต์…”๋„ ์ฒด์ด๋‹์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ต์…”๋„ ์ฒด์ด๋‹

ํ”„๋กœํผํ‹ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์กด์žฌํ•˜๋ฉด ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ฐ์‚ฐ์ž
์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์ ‘๊ทผํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด ์˜ต์…”๋„ ์ฒด์ด๋‹ ์ด๋‹ค.
โ€ข
๋ฌธ๋ฒ•
const value = object?.property?.nestedProperty;
JavaScript
๋ณต์‚ฌ
โ€ข
์˜ˆ์‹œ ์ฝ”๋“œ
const user = { id: 1, username: 'john_doe', profile: { email: 'john@example.com', address: { city: 'New York' } } }; // ์ค‘์ฒฉ๋œ ํ”„๋กœํผํ‹ฐ์— ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผ const city = user?.profile?.address?.city; console.log(city); // ์ถœ๋ ฅ: 'New York' const nonExistentProperty = user?.nonExistentProperty; console.log(nonExistentProperty); // ์ถœ๋ ฅ: undefined
JavaScript
๋ณต์‚ฌ

๋ชจ๋“ˆ import, export:

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

export

: ECMAScript ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ชจ๋“ˆ์—์„œ ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋“ฑ์„ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‚ด๋ณด๋‚ด๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ‚ค์›Œ๋“œ

import

: ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ๋‚ด๋ณด๋‚ธ ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋“ฑ์„ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ

export

โ€ข
๊ฐœ๋ณ„ ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜ ๋‚ด๋ณด๋‚ด๊ธฐ
โ€ข
๋ณ„์นญ์„ ์‚ฌ์šฉํ•œ ๊ฐœ๋ณ„ ๋‚ด๋ณด๋‚ด๊ธฐ
โ€ข
๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ
โ€ข
๊ฐœ๋ณ„ ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜ ๋‚ด๋ณด๋‚ด๊ธฐ
// 14_module.mjs // ๊ฐœ๋ณ„ ๋ณ€์ˆ˜ ๋‚ด๋ณด๋‚ด๊ธฐ export const myVariable = 42; // ๊ฐœ๋ณ„ ํ•จ์ˆ˜ ๋‚ด๋ณด๋‚ด๊ธฐ export function myFunction() { return 'Hello, world!'; }
JavaScript
๋ณต์‚ฌ
โ€ข
๋ณ„์นญ์„ ์‚ฌ์šฉํ•œ ๊ฐœ๋ณ„ ๋‚ด๋ณด๋‚ด๊ธฐ
// 14_module.mjs // ๊ฐœ๋ณ„ ๋ณ€์ˆ˜, ํ•จ์ˆ˜์— ๋ณ„์นญ(alias) ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ณด๋‚ด๊ธฐ const internalVariable = 42; function internalFunction() { return 'Hello, world!'; } export { internalVariable as myVariable, internalFunction as myFunction };
JavaScript
๋ณต์‚ฌ
โ€ข
๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ
// 14_module.mjs // ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ const myVariable = 42; export default myVariable;
JavaScript
๋ณต์‚ฌ

import

โ€ข
๊ฐœ๋ณ„ ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ
โ€ข
๋ชจ๋“  ๋‚ด์šฉ ๊ฐ€์ ธ์˜ค๊ธฐ
โ€ข
๊ธฐ๋ณธ ๊ฐ€์ ธ์˜ค๊ธฐ
โ€ข
๊ฐœ๋ณ„ ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ
// 14_module2.mjs // ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ๋ชจ๋“ˆ ๊ฐ€์ ธ์˜ค๊ธฐ import { myVariable, myFunction } from './14_module.mjs'; console.log(myVariable); // ์ถœ๋ ฅ: 42 const result = myFunction(); console.log(result); // ์ถœ๋ ฅ: 'Hello, world!'
JavaScript
๋ณต์‚ฌ
โ€ข
๋ชจ๋“  ๋‚ด์šฉ ๊ฐ€์ ธ์˜ค๊ธฐ
// 14_module2.mjs // ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ๋ชจ๋“ˆ ๊ฐ€์ ธ์˜ค๊ธฐ (๋ชจ๋“  ๋‚ด์šฉ) import * as myModule from './14_module.mjs'; console.log(myModule.myVariable); // ์ถœ๋ ฅ: 42 console.log(myModule.myFunction()); // ์ถœ๋ ฅ: 'Hello, world!'
JavaScript
๋ณต์‚ฌ
โ€ข
๊ธฐ๋ณธ ๊ฐ€์ ธ์˜ค๊ธฐ
// 14_module2.mjs // ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ธ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ import myVariable from './14_module.mjs'; console.log(myVariable); // ์ถœ๋ ฅ: 42
JavaScript
๋ณต์‚ฌ

Github (์†Œ์Šค์ฝ”๋“œ)

Node.js_TJE
ALOHA-CLASS