νλ‘ νΈμλ κ°λ°μλ₯Ό μν JavaScript μ΅μ ES κΈ°λ₯ νμ©λ² μ΄μ 리 ππ»
μλ νμΈμ, νλ‘ νΈμλ κ°λ°μ μ¬λ¬λΆ! π μ€λμ μ΅μ JavaScript ES(ECMAScript)μ κ°λ ₯νκ³ μ μ©ν κΈ°λ₯λ€μ μμ°¨κ² μ΄μ 리ν΄λ³΄λ €κ³ ν©λλ€. πβ¨ μ¬κΈ°μ μκ°νλ ES κΈ°λ₯λ€μ μ λλ‘ μμ§νκ³ νμ©νλ€λ©΄, μ½λκ° λ κΉλν΄μ§κ³ , μμ°μ±λ↑↑! κ²λ€κ° νμ μμλ "μ΄κ±° μ°λΌκ΅¬μ?" νλ©° μ 보μ΄κΈ° λ± μ’μμ! π
κ·ΈλΌ μ§κΈλΆν° μ°¨κ·Όμ°¨κ·Ό, μ¬λ―Έμκ³ μ€μ©μ μΌλ‘ μ΅μ ES κΈ°λ₯λ€μ νν€μ³ λ³Όκ²μ! π₯π‘
π μλ‘ : μ μ΅μ ES κΈ°λ₯μ μ£Όλͺ©ν΄μΌ ν κΉ? π€
- π μμ±λ λμμ§ μ½λ: μ΅μ κΈ°λ₯λ€μ΄ λ¬Έλ²μ κ°λ¨νκ² λ§λ€μ΄μ£Όκ³ , κ°λ μ±λ π―
- π κ°λ° μλ Up: λ°λ³΅λλ μμ μ μ€μ΄κ³ , ν¨μ¨μ μΈ λ‘μ§ μμ± κ°λ₯ βοΈ
- π§ μ΅μ νΈλ λ λ°μ: νλ‘ νΈμλ νλ μμν¬(React, Vue, Svelte λ±)μ ν¨κ» μ°λ©΄ λ λΉλλ κΈ°λ₯λ€!
- π κΈ°μ ·κ°μΈ κ°λ° κ²½μλ ₯ κ°ν: μ°¨λ³νλ μ€ν¬μ μΌλ‘ μ»€λ¦¬μ΄ μ₯μ₯!
κ·ΈλΌ, μ§κΈ λ°λ‘ ν΅μ¬ κΈ°λ₯λ€μ νλμ© νν€μ³ λ³ΌκΉμ? ππ
π₯ 1. μ΅μ ES κΈ°λ₯μ ν΅μ¬ ν¬μΈνΈ 체ν¬! π
μ¬κΈ°μλ #κ°λ μ 리μ #μ€μ ν¬μΈνΈλ₯Ό λΉ λ₯΄κ² νμ΄λ³Όκ²μ! β
πΉ 1. Optional Chaining (?.) & Nullish Coalescing (??)
- π λͺ©μ : κΉμ κ°μ²΄ ꡬ쑰 μμ νκ² μ κ·Ό + null/undefined μ²λ¦¬ κ°νΈν
- β
νΉμ§:
obj?.prop?.subProp
: μμ ν 체μ΄λ! μ‘΄μ¬νμ§ μμΌλ©΄undefined
λ°ν πvalue ?? defaultValue
: null λλ undefinedμΌ λλ§ λμ²΄κ° μ¬μ© π‘
πΉ 2. Relative Timing API (Performance.now(), requestIdleCallback)
- π λͺ©μ : μ±λ₯ μ΅μ νμ λΆν κ΄λ¦¬
- β
νΉμ§:
Performance.now()
: μ λ°ν μ±λ₯ μΈ‘μ κ°λ₯ β±οΈrequestIdleCallback()
: μ¬μ μκ°μ λΉλκΈ° μμ μν π§
πΉ 3. BigInt (ν° μ μ μ²λ¦¬)
- π λͺ©μ : λλ² νκ³ κ·Ήλ³΅! 2β΅³ μ΄μ μ μλ λ¬Έμ μμ΄ λ€λ£¨κΈ° β¨
- β
νΉμ§:
BigInt
νμ ,n
μ λ―Έμ¬ μ¬μ© βοΈ
πΉ 4. Dynamic Import (λμ λͺ¨λ λ‘λ©)
- π λͺ©μ : μ½λ λΆν κ³Ό λ‘λ© μκ° μ΅μ ν
- β
νΉμ§:
import()
ꡬ문 νμ©, νμν λλ§ λͺ¨λ λΆλ¬μ€κΈ° π
πΉ 5. Private Class Fields & Methods (ν΄λμ€ λ΄ λΉκ³΅κ° νλ/λ©μλ)
- π λͺ©μ : μΊ‘μν κ°ν! λ΄λΆ ꡬν μ¨κΈ°κΈ° π
- β
νΉμ§:
#privateField
,#privateMethod()
μ¬μ© π
βοΈ 2. μ€μ νμ©λ²! β¨β¨
κ·ΈλΌ μ΄μ , μ€λ¬΄μ λ°λ‘ μ¨λ¨Ήμ μ μλ ꡬ체μ νμ© κΏνμ 리μ€νΈμ ν΄λ³Όκ²μ! ππΌ
π― 1. μ΅μ λ¬Έλ²μΌλ‘ μ½λ κ°κ²°νκ²! β
- β
Optional Chaining μ¬μ© μμ
js
const userAddress = user?.address?.street; // μμ νκ² μ£Όμκ° μμ λλ μλ¬ λ°©μ§ π
- β
Nullish Coalescing νμ©
js
const port = process.env.PORT ?? 3000; // νκ²½λ³μκ° μλ€λ©΄ 300λ² ν¬νΈ μ¬μ©! π’
π― 2. μ±λ₯ κ°μ , λΆν λΆμ°! π¦
- β
Performance API νμ©
js
const start = performance.now();
// λ°λ³΅ μμ or λ°μ΄ν° μ²λ¦¬
const end = performance.now();
console.log(μ²λ¦¬ μκ°: ${end - start}ms
);
- β
requestIdleCallbackμΌλ‘ λΉλκΈ° μ΅μ ν
js
requestIdleCallback(() => {
// λΈλΌμ°μ μ¬μ μκ°μ μνν μμ
});
π― 3. λͺ¨λ μ½λ λΆν ! π§©
- β
Dynamic Import μ μ© μμ
js
button.addEventListener('click', () => {
import('./heavyModule.js').then(module => {
module.init();
});
});
- β μ½λμ€ν리ν κ³Ό νΌν¬λ¨Όμ€ ν₯μ!
π― 4. μΊ‘μνμ λ°μ΄ν° μλ! π
- β
ν΄λμ€ λ΄ Private νλ νμ©
js
class MyClass {
#privateData = 0; - increment() {
this.#privateData++;
}
}
π― 5. μ΅μ μ μμ²λ¦¬! BigInt νμ©λ² π°
- β
BigInt μ¬μ© μ
js
const bigNumber = 9007199254740991n; // n μ λ―Έμ¬ νμ!
console.log(bigNumber + 1n);
π 3. λνκ°κΈ°! μΆκ° νκ³Ό μΆμ² λΌμ΄λΈλ¬λ¦¬ π
- πΉ μ½λ μ 리μ μ€νμΌλ§ λꡬ: ESLint, Prettierλ‘ μ΅μ λ¬Έλ² κ·μΉ μ μ©
- πΉ ν μ€νΈ νλ μμν¬: Jest, Vitestμμ μ΅μ JS κΈ°λ₯ μ§μ μ¬λΆ 체ν¬
- πΉ μ°Έκ³ μ¬μ΄νΈ:
- MDN Web Docs : μμΈ κ³΅μ λ¬Έμ
- ECMAScript 곡μ μ¬μ΄νΈ : μ΅μ νμ€ μ 보
β 4. κ²°λ‘ : μ§κΈ λ°λ‘ μ΅μ ES κΈ°λ₯μΌλ‘ κ°λ° μλ μ± νΈ μμΉ! ππ₯
ν΅μ¬ ν¬μΈνΈ μ 리 β β
- β μ΅μ λ¬Έλ²μΌλ‘ κ°κ²°ν μ½λ μμ± κ°λ₯!
- β μ±λ₯ μ΅μ ν API μ κ·Ή νμ©!
- β λͺ¨λκ³Ό μΊ‘μν κΈ°λ₯μΌλ‘ κΉλν ꡬ쑰!
- β μ€λ¬΄μμ λ°λ‘ μ°λ μμ μ ν!
π μ¦μ μ€μ²! μΌλ¨ μ€λ λ°°μ΄ κΈ°λ₯ νλμ© νλ‘μ νΈμ μ μ©ν΄λ³΄μΈμ! μλ‘μ΄ JS μΈμμ κ²½ννλ 첫걸μ, λ°λ‘ μ§κΈμ λλ€! ππ
π λ§λ¬΄λ¦¬νλ©°: κ³μ μ±μ₯νλ κ°λ°μκ° λμ! π±β¨
μ¬λ¬λΆμ μ½λ© λΌμ΄νκ° λ μ¦κ²κ³ , λ ν¨μ¨μ μ΄κΈΈ λ°λΌλ©΄μ μ€λμ μ΅μ ES νμ©λ² μ΄μ 리λ₯Ό λ§μΉ©λλ€! πͺπ κΆκΈν μ μ΄λ κΆκΈμ¦μ λκΈλ‘ λ¨κ²¨ μ£ΌμΈμ! ν¨κ» μ±μ₯νκΈΈ κΈ°λνλ©°, λ€μμλ μ μ΅ν μ λ³΄λ‘ μ°Ύμλ΅κ² μ΅λλ€! κ°μ¬ν©λλ€! ππ€
π μ’μμ΄μ! ꡬλ κ³Ό μ’μμ, μλ¦Ό μ€μ μμ§ λ§μΈμ! π’π
μ΄μ κΈ λ³΄κΈ°!!