-
ES5 VS ES6 VS ES6+ μ°¨μ΄ - AIπ€JavaScript 2023. 7. 15. 13:05
μλ°μ€ν¬λ¦½νΈλ μ€λλ κ°μ₯ μΈκΈ°μκ³ λ리 μ¬μ©λλ νλ‘κ·Έλλ° μΈμ΄ μ€ νλμ λλ€. μ΄ μΈμ΄λ μ¬λ¬ μ°¨λ‘ λ³νμ κ±°μ³ μλ‘μ΄ κΈ°λ₯κ³Ό κΈ°λ₯μ λμ ν΄μμ΅λλ€.
μ΄ λ¬Έμμμλ JavaScriptμ μΈ κ°μ§ μ£Όμ λ²μ μΈ ES5, ES6 λ° ES6+μ μ°¨μ΄μ μ λν΄ μ€λͺ ν©λλ€.
ES5
ES5(ECMAScript 5)λ 2009λ μ μΆμλμμΌλ©° νμ¬ κ°μ₯ λ리 μ§μλλ JavaScript λ²μ μ λλ€. ES5μ μ£Όμ κΈ°λ₯ μ€ μΌλΆλ λ€μκ³Ό κ°μ΅λλ€:
- Strict λͺ¨λ
- "Strict λͺ¨λ"λ JavaScript μ½λλ₯Ό μμ±ν λ μ격ν λ¬Έλ² κ·μΉμ μ μ©νλ λͺ¨λμ λλ€. μ΄ λͺ¨λλ₯Ό μ¬μ©νλ©΄ μ½λμ μκΈ°μΉ μμ λμμ λ°©μ§νκ³ , λ²κ·Έλ₯Ό λ μ½κ² μ°Ύμ μ μμ΅λλ€. ES5μμ μ²μ λμ λ κΈ°λ₯ μ€ νλμ λλ€.
- JSON μ§μ
- map, reduce λ° filterμ κ°μ λ°°μ΄ λ©μλ
- Function.bind
- Function.bindλ ES5μμ λμ λ λ©μλλ‘, ν¨μμ this κ°μ μ€μ ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, κ°μ²΄μ λ©μλλ₯Ό μ½λ°± ν¨μλ‘ μ λ¬νλ €λ©΄ ν΄λΉ λ©μλμ this κ°μ μλμΌλ‘ μ€μ ν΄μΌ ν©λλ€. Function.bindλ₯Ό μ¬μ©νλ©΄ μ΄λ₯Ό λ μ½κ² ν μ μμ΅λλ€. Function.bind λ©μλλ μλ‘μ΄ ν¨μλ₯Ό λ°ννλ©°, μ΄ ν¨μλ μλ³Έ ν¨μμ λμΌν κΈ°λ₯μ μννμ§λ§, this κ°μ μ§μ ν μ μμ΅λλ€.
ES5λ κ±°μ λͺ¨λ μΉ λΈλΌμ°μ μ νΈνλλ©° λ€μν μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ λ° μ¬μ©ν μ μμ΅λλ€.
ES6
ES6(ECMAScript 2015)λ 2015λ μ μΆμλμμΌλ©° μΈμ΄μ μ¬λ¬ κ°μ§ μ€μν κΈ°λ₯μ λμ νμ΅λλ€. ES6μ μ£Όμ κΈ°λ₯ μ€ μΌλΆλ λ€μκ³Ό κ°μ΅λλ€:
- νμ΄ν ν¨μ
- ν΄λμ€
- ES6μμ ν΄λμ€λ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μ§μνκΈ° μν΄ λμ λ μλ‘μ΄ κ΅¬λ¬Έμ λλ€. ν΄λμ€λ μμ±μ ν¨μμ μν μ μννλ©°, κ°μ²΄λ₯Ό μμ±νκΈ° μν λͺ¨λΈμ μ 곡ν©λλ€. ν΄λμ€λ₯Ό μ¬μ©νλ©΄ νλ‘ν νμ κΈ°λ° μμλ³΄λ€ λ μ½κ² κ°μ²΄μ λ©μλλ₯Ό μ μνκ³ μμν μ μμ΅λλ€. ν΄λμ€λ μΌλ°μ μΌλ‘ μμ±μ ν¨μλ³΄λ€ κ°λ μ±μ΄ λκ³ μ½λ μμ±μ΄ λ μ½μ΅λλ€.
- let λ° const ν€μλ
- ν νλ¦Ώ 리ν°λ΄
- ν νλ¦Ώ 리ν°λ΄μ ES6μμ λμ λ μλ‘μ΄ λ¬Έμμ΄ νκΈ°λ²μ λλ€. κΈ°μ‘΄μ λ¬Έμμ΄ μ°κ²° λ°©λ²κ³Ό λ¬λ¦¬, ν νλ¦Ώ 리ν°λ΄μ λ°±ν±(backtick)(`)μΌλ‘ λ¬Έμμ΄μ κ°μΈκ³ , λ³μλ ννμμ ${}μΌλ‘ κ°μΈμ λ¬Έμμ΄ μ€κ°μ μ½μ ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ½λμ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ΄ μ¦κ°νλ©°, κΈ΄ λ¬Έμμ΄μ λ€λ£° λ μ μ©ν©λλ€.
- Promises
- Promiseλ JavaScriptμμ λΉλκΈ° μμ μ μ²λ¦¬νλ κ°μ²΄μ λλ€. Promise κ°μ²΄λ λΉλκΈ° μμ μ΄ μ±κ³΅μ μΌλ‘ μλ£λμλμ§ λλ μ€ν¨νλμ§λ₯Ό λνλ΄λ μνμ ν¨κ» λ°νλ©λλ€. Promiseλ μΌλ°μ μΌλ‘ μ½λ°± ν¨μλ³΄λ€ λ λμ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ μ 곡ν©λλ€. Promiseλ ES6μμ λμ λμμΌλ©°, λΉλκΈ° μμ μ μ²λ¦¬νλ λ° λ§€μ° μ μ©ν©λλ€.
- λͺ¨λ
- λͺ¨λμ ES6μμ λμ λ μλ‘μ΄ κ°λ μΌλ‘, μ½λλ₯Ό μ¬λ¬ νμΌλ‘ λΆν νκ³ μ¬μ¬μ©μ±μ λμ΄κΈ° μν΄ μ¬μ©λ©λλ€. λͺ¨λμ νμΌ μμ€μμ λμνλ©°, λͺ¨λ νμΌμμ μ μΈν λ³μ, ν¨μ, ν΄λμ€ λ±μ μΈλΆ νμΌμμ λΆλ¬μ μ¬μ©ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ½λμ κ°λ μ±κ³Ό μ μ§λ³΄μμ±μ΄ μ¦κ°νλ©°, μ½λμ μ¬μ¬μ©μ±λ λμμ§λλ€. λͺ¨λμ exportμ import ꡬ문μ μ¬μ©νμ¬ μ μνκ³ μ¬μ©ν©λλ€.
ES6λ μ½λλ₯Ό λ μ½κ² μ½κ³ μ°λλ‘νκΈ° μν΄ μΌλΆ ꡬ문 μ€ν(Syntactic sugar)λ λμ νμ΅λλ€. μλ₯Ό λ€μ΄, μ€νλ λ μ°μ°μ (...)λ λ°°μ΄ λλ κ°μ²΄μ λ΄μ©μ νΌμΉ μ μμ΅λλ€.
ES6λ ES5λ§νΌ λ리 μ§μλμ§λ μμ§λ§, κ°λ°μλ€ μ¬μ΄μμ λΉ λ₯΄κ² μΈκΈ°λ₯Ό μ»κ³ μμ΅λλ€.
ES6+
ES6+λ ES6 μ΄νμ μΆμλ JavaScriptμ μλ‘μ΄ λ²μ μ κ°λ¦¬ν΅λλ€. μ΄λ¬ν λ²μ μ μΈμ΄μ μλ‘μ΄ κΈ°λ₯κ³Ό κΈ°λ₯μ λμ ν©λλ€. ES6+μ μ£Όμ κΈ°λ₯ μ€ μΌλΆλ λ€μκ³Ό κ°μ΅λλ€.
- Async/await
- Decorators
- Private class members
- Optional chaining
ES6+λ ES5 λλ ES6λ§νΌ λ리 μ§μλμ§λ μμ§λ§, κ°λ°μλ€μ λ κ°λ ₯νκ³ ν¨μ¨μ μΈ μΉ μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν΄ μ΄λ₯Ό μ κ·Ήμ μΌλ‘ μ¬μ©νκ³ μμ΅λλ€.
κ²°λ‘ μ μΌλ‘, ES5, ES6 λ° ES6+λ λͺ¨λ JavaScriptμ μλ‘μ΄ κΈ°λ₯κ³Ό κΈ°λ₯μ λμ νλ λ²μ μ λλ€. ES5λ κ°μ₯ λ리 μ§μλλ λ²μ μ΄μ§λ§, ES6μ ES6+λ λμ± λͺ¨λνκ³ κ°λ ₯ν κΈ°λ₯μ μ 곡νλ©° κ°λ°μλ€ μ¬μ΄μμ μ μ λ μΈκΈ°λ₯Ό μ»κ³ μμ΅λλ€.
ES6+ κΈ°λ₯ μ€λͺ
Async/await: λΉλκΈ° μ½λλ₯Ό λ³΄λ€ κ°κ²°νκ³ λκΈ°μ μΈ λ°©μμΌλ‘ μμ±ν μ μλλ‘ λμμ£Όλ λ¬Έλ²μ λλ€. async ν¨μ λ΄λΆμμ await ν€μλλ₯Ό μ¬μ©νμ¬ λΉλκΈ° μμ μ μλ£λ₯Ό κΈ°λ€λ¦¬λ λ°©μμΌλ‘ μ¬μ©ν©λλ€.
**async** function fetchData() { const response = **await** fetch('<https://api.example.com/data>'); //ν΄λΉ λΉλκΈ° μμ μ΄ μλ£λ λκΉμ§ μ½λ μ€νμ μΌμ μ€μ§ const data = **await** response.json(); return data; }
π€¨Decorators: ν΄λμ€λ ν΄λμ€μ λ©μλμ κΈ°λ₯μ μΆκ°νλ λ¬Έλ²μ μΈ νΈμ κΈ°λ₯μ λλ€. μ£Όλ‘ μ½λ μ¬μ¬μ©μ΄λ λ‘κΉ , μΈμ¦ λ±μ μΈ‘λ©΄μμ μ μ©νκ² μ¬μ©λ©λλ€.
function log(target, name, descriptor) { const originalMethod = descriptor.value; descriptor.value = function (...args) { console.log(`Calling ${name} with arguments: ${args}`); return originalMethod.apply(this, args); }; return descriptor; } class MyClass { @log myMethod(arg) { // do something } }
Private class members: ν΄λμ€ λ΄λΆμμλ§ μ κ·Ό κ°λ₯ν private λ©€λ²λ₯Ό λμ νλ κΈ°λ₯μ λλ€. **#**μ μ¬μ©νμ¬ μ μλ λ³μλ λ©μλλ ν΄λμ€ μΈλΆμμ μ κ·Όμ΄ λΆκ°λ₯ν©λλ€.
class MyClass { #privateField = 42; #privateMethod() { // do something } accessPrivateField() { return this.#privateField; // ν΄λμ€ λ΄λΆμμλ μ κ·Ό κ°λ₯ } } const instance = new MyClass(); console.log(instance.#privateField); // μλ¬: μ κ·Ό λΆκ°λ₯
Optional chaining: μ°κ²°λ κ°μ²΄ ꡬ쑰μμ μ€κ°μ μ‘΄μ¬νμ§ μλ νλ‘νΌν°μ μ κ·Όν λ μλ¬λ₯Ό λ°©μ§νκ³ κ°κ²°ν μ½λλ₯Ό μμ±ν μ μλλ‘ λμμ£Όλ κΈ°λ₯μ λλ€.
const user = { name: 'John', address: { city: 'New York', zipcode: '12345' } }; const zipcode = user.address?.zipcode; console.log(zipcode); // μΆλ ₯: '12345' const country = user.address?.country?.name; console.log(country); // μΆλ ₯: undefined (μλ¬ λ°©μ§)
'JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Prototype - AIπ€ (0) 2023.07.15