ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.