Search

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