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
볡μ¬