JavaScript (6) μΈλ€μΌν 리μ€νΈν μλ°μ€ν¬λ¦½νΈμ ES6 ~ES2014 ECMAScript(ECMA-262) λ Javascript λͺ μΈ λλ μ€νμ μλ―Έν©λλ€. ECMA-262 : ECMAμΈν°λ΄μ λ(νμ€κΈ°κ΅¬)μ ECMAScript μΈμ΄μ 곡μ μ¬μμΈ ECMA-262 νμ€μ λ§λ€μμ΅λλ€. μ¦, ECMAScriptλ μλ°μ€ν¬λ¦½νΈμ νμ€μ΄λ©° λΌλ(core)λ₯Ό ꡬμ±νλ μ€ν¬λ¦½νΈ μΈμ΄μ λλ€. μλ°μ€ν¬λ¦½νΈλ ECMAScript λͺ μΈ λλ μ€νμ λ°λ₯΄λ μ€ν¬λ¦½νΈ μΈμ΄λΌκ³ ν μ μμ΅λλ€. ECMAScript 6 (2015) ES6μλ λ€μκ³Ό κ°μ μλ‘μ΄ κΈ°λ₯μ΄ μΆκ° λμμ΅λλ€. - arrows (νμ΄ν ν¨μ) - classes (ν΄λμ€) - enhanced object literals (object λ©μλ μ μΈ λ° μμ±(λμ ) μ μΈ) - template strings (ν νλ¦Ώ λ¬Έμμ΄).. μΉ νμ€κ³Ό μΉ μ κ·Όμ± μΉ νμ€μ μ΄λ€ νκ²½μμλ μ΄μ©ν μ μλ μΉνμ΄μ§λ₯Ό, μΉ μ κ·Όμ±μ μ΄λ€ μ¬λμ΄λ μ΄μ©ν μ μλ μΉνμ΄μ§λ₯Ό λ§λ€ μ μλ λ°©λ²μ λ΄κ³ μλ€. μΉ νμ€μ΄λ? W3C(Wordl Wide Web Consortium)μμ κΆκ³ νλ μΉμμ νμ€μ μΌλ‘ μ¬μ©λλ κΈ°μ μ΄λ κ·μΉ μ¬μ©μκ° μ΄λ ν μ΄μ체μ λ λΈλΌμ°μ λ₯Ό μ¬μ©νλλΌλ μΉνμ΄μ§κ° λμΌνκ² λ³΄μ΄κ³ μ μμ μΌλ‘ μλν μ μλλ‘ νλ μΉνμ΄μ§ μ μ κΈ°λ²μ λ΄κ³ μλ€. μΉ κ°λ°μ μ¬μ©νλ μΈμ΄μΈ HTML, CSS, JavaScript λ±μ κΈ°μ μ λ€λ£¬λ€. νμ¬λ ν¬λ‘¬, μ£μ§, μ¬ν리 λ± μ΅μ μΉ λΈλΌμ°μ λ€μ λͺ¨λ μΉνμ€μ μ§μνλ€. μΉ νμ€μ λ§μΆμ΄ μΉνμ΄μ§λ₯Ό μμ±νλ©΄ μ΄λ€ λΈλΌμ°μ λ₯Ό μ¬μ©νλ λμΌν κ²°κ³Όλ¬Όμ μ»μ μ μλ€. μΉ νμ€μ μ€μνλ λ°©λ² 1. DOCTYP.. λͺ¨λ λ²λ€λ¬μ Webpack JavaScript νλ μμν¬μΈ React, Vue, Svelte, Angular λ±μ μ¬μ©νλ€ λ³΄λ©΄ λͺ¨λ λ²λ€λ¬(module bundler)λ νμμ μΌλ‘ μΈκΈλλ λ΄μ©μ λλ€. λͺ¨λ λ²λ€λ¬λ JavaScript λͺ¨λμ λΈλΌμ°μ μμ μ€νν μ μλ λ¨μΌ JavaScript νμΌλ‘ λ¬Άλ λ° μ¬μ©λλ λꡬμ λλ€. λͺ¨λ(Module) μ ν리μΌμ΄μ μ κΈ°λ₯μ΄ λ§μμ§μλ‘ μμ±ν΄μΌνλ μ½λκ° κΈΈμ΄μ§ μ μμ΅λλ€. λͺ¨λ μ½λλ₯Ό ν κ°μ νμΌμ μμ±νλ λμ κΈ°λ₯(λ³μ, κ°μ²΄, λ°°μ΄, ν¨μ, ν΄λμ€ λ±)μ λ°λΌ λ³λμ νμΌμ μ½λλ₯Ό λΆλ¦¬ν μ μμ΅λλ€. μ½λλ₯Ό λΆλ¦¬νλ κΈ°μ€μ λ°λΌ νμΌμ΄ μλΉν λ§μμ§ μ μμ§λ§, ν κ°μ νμΌμ μ½λλ₯Ό μμ±νλ κ²λ³΄λ€ 체κ³μ μ΄κ³ μ μ§λ³΄μκ° μ¬μμ§λλ€. κ²°κ΅ λͺ¨λμ λΆλ¦¬λ νμΌμ μλ―Έν©λ.. μλ°μ€ν¬λ¦½νΈμ Promiseμ await/async Promise μλ°μ€ν¬λ¦½νΈ Promise κ°μ²΄λ λΉλκΈ° μμ μ μ΅μ’ μλ£ λλ μ€ν¨λ₯Ό λνλ΄λ λ μμ μΈ κ°μ²΄μ΄λ€. λΉλκΈ° μμ μ΄ λλ λκΉμ§ κ²°κ³Όλ₯Ό κΈ°λ€λ¦¬λ κ²μ΄ μλλΌ, κ²°κ³Όλ₯Ό μ 곡νκ² λ€λ 'μ½μ'μ λ°ννλ€λ μλ―Έμμ PromiseλΌ λͺ λͺ μ§μ΄μ‘λ€κ³ νλ€. Promise κ°μ²΄λ₯Ό μμ±νλ €λ©΄ new ν€μλμ Promise μμ±μ ν¨μλ₯Ό μ¬μ©νλ©΄ λλ€. μ΄λ Promise μμ±μ μμ λκ°μ λ§€κ°λ³μλ₯Ό κ°μ§ μ½λ°± ν¨μλ₯Ό λ£κ² λλλ°, 첫 λ²μ§Έ μΈμλ μμ μ΄ μ±κ³΅νμ λ μ±κ³΅(resolve)μμ μλ €μ£Όλ κ°μ²΄μ΄λ©°, λ λ²μ§Έ μΈμλ μμ μ΄ μ€ν¨νμ λ μ€ν¨(reject)μμ μλ €μ£Όλ μ€λ₯ κ°μ²΄μ΄λ€. const myPromise = new Promise((resolve, reject) => { // λΉλκΈ° μμ .. μλ°μ€ν¬λ¦½νΈμ νΈμΆ μ€νκ³Ό μ΄λ²€νΈ 루ν μλ°μ€ν¬λ¦½νΈ λ°νμ νκ²½ Call stackκ³Ό Event loopλ μλ°μ€ν¬λ¦½νΈμ λμ μ리λ₯Ό μ΄ν΄νκΈ° μν΄ κΌ μμ§ν΄μΌνλ κ°λ μ΄λ€. μλ°μ€ν¬λ¦½νΈκ° μ€νλλ νκ²½μ μλ―Ένλ μλ°μ€ν¬λ¦½νΈ λ°νμ νκ²½μ λ€μκ³Ό κ°μ΄ ꡬμ±λμ΄ μλ€. ν¬κ² Memory heap, call stack, web apis, callback queue, event loopκ° μλ€. Call Stack νΈμΆ μ€νμ ν¨μμ νΈμΆμ μ€ν λ°©μμΌλ‘ κΈ°λ‘νλ μλ£κ΅¬μ‘°λ€. νλ‘κ·Έλ¨μμ μμ²μ΄ λ€μ΄μ¬ λλ§λ€ μμλλ‘ μ€νμ λ΄κ³ , κ°μ₯ λμ€μ λ€μ΄μ¨ μμ μ λ¨Όμ μ²λ¦¬νλ LIFO(Last In First Out) ꡬ쑰μ΄λ€. μλ°μ€ν¬λ¦½νΈλ μ±κΈ μ€λ λ κΈ°λ° μΈμ΄μ΄κΈ° λλ¬Έμ νλμ νΈμΆ μ€νλ§μ κ°μ§κ³ μκ³ , ν λ²μ νλμ taskλ§ μ²λ¦¬ν μ .. μλ°μ€ν¬λ¦½νΈμ λΉλκΈ° μλ°μ€ν¬λ¦½νΈλ μ±κΈ μ€λ λ μΈμ΄μ΄κΈ° λλ¬Έμ ν λ²μ νλμ μμ λ§ μνν μ μλ€. μ΄μ μμ μ΄ μλ£λμ΄μΌ λ€μ μμ μ μνν μ μλ€. μ΄λ¬ν μ½λ μμ°¨ μ€νμ λκΈ°(Synchronous)λΌκ³ νλ€. κ·Έλ¬λ μμ μ΄ μ€λ 걸리거λ μλ΅μ΄ λ¦μ΄μ§λ κ²½μ°μ μ 체μ μΈ μ±λ₯μ μν₯μ μ€ μ μλ€. μλ₯Ό λ€μ΄ μλ²μ λ°μ΄ν°λ₯Ό μμ²νκ³ μλ΅μ λ°μμΌ νλ μμ μ΄ μλ€λ©΄, μλ΅μ΄ μ¬ λκΉμ§ λκΈ°ν΄μΌ νλ€. μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λμ λ κ°λ μ΄ λΉλκΈ°(Asynchronous)μ΄λ€. λΉλκΈ°λ νΉμ μμ μ μλ£λ₯Ό κΈ°λ€λ¦¬μ§ μκ³ λ€λ₯Έ μμ μ λμμ μνν μ μκ² νλ€. λΉλκΈ°λ λ©μΈ μ€λ λκ° μμ μ λ€λ₯Έ κ³³μ μΈκ°νμ¬ μ²λ¦¬λκ² νκ³ , κ·Έ μμ μ΄ μλ£λλ©΄ μ½λ°± ν¨μλ₯Ό λ°μ μ€ννλ λ°©μμΌλ‘, μ½κ² λ§ν΄ μμ μ λ°±κ·ΈλΌμ΄.. μ΄μ 1 λ€μ