ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ์™œ ํ•˜ํ•„ ๋งŽ๊ณ  ๋งŽ์€ ๋ฒ„์ „ ์ค‘ ES6 ์ผ๊นŒ?
    ๐Ÿ‹ JavaScript 2023. 2. 18. 00:26

     

    ๐Ÿ‹ ๊ณต๋ถ€ ๋ฐฐ๊ฒฝ


    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์™ธ๋ถ€ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ธ import์™€ require์— ๊นŠ์ด ํŒŒ๊ณ ๋“ค๋‹ค๊ฐ€, import ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ES6, require ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” CommonJS๊นŒ์ง€ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

    ์ด ๋ฌธ์„œ์—์„œ๋Š” ๋งŽ๊ณ  ๋งŽ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ• ์ค‘ ์™œ ํ•˜ํ•„ ES6๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ์–ธ๊ธ‰๋˜๊ณ , ๋Œ€ํ‘œ์ ์œผ๋กœ ์ด๊ฐ€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ–ˆ๋Š”์ง€์— ๋Œ€ํ•˜์—ฌ ์ •๋ฆฌํ•˜์˜€๋‹ค.

    ๊ทธ ๊ณผ์ •์—์„œ ๋‹จ์ˆœํžˆ ํŽธ์˜๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋˜ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜, ๋‚ด๊ฒŒ๋Š” ๋ชจํ˜ธํ–ˆ๋˜ ํด๋ž˜์Šค ๋ฌธ๋ฒ•๊ณผ-ํ”„๋กœํ† ํƒ€์ž…์˜ ๊ด€๊ณ„์„ฑ์— ๋Œ€ํ•ด ์ถ”๊ฐ€ ๊ณต๋ถ€๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

     

    ๐Ÿ‹ ES6? ECMAScript? Netscape? ๋Œ€์ฒด ๋ญ์•ผ


    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐœ๋ฐœํ•œ Netscape๊ฐ€, ๊ทœ๊ฒฉํ™”๋œ ํ‘œ์ค€์„ ์Šน์ธํ•˜๋Š” ๊ณต์‹ ๊ธฐ๊ด€ Ecma์— ์ œ์ถœํ•œ ํ‘œ์ค€์ด ECMA-262์ด๋‹ค. ๊ทธ ํ‘œ์ค€ํ™”๋œ ๊ทœ๊ฒฉ์„ ๋”ฐ๋ฅด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ƒˆ๋กœ์šด ์ด๋ฆ„์ด ๋ฐ”๋กœ ECMAScript.

    ES6 ํ‘œ์ค€์„ ๋”ฐ๋ฅธ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋‚˜ ECMA ๊ทœ๊ฒฉ์„ ๋”ฐ๋ฅธ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

     

    ๐Ÿ‹ ES6, ES6.. ํ•˜ํ•„ ์™œ?


    (2023 1์›” ๊ธฐ์ค€) ํ˜„์žฌ๊นŒ์ง€ ES13๊นŒ์ง€ ๋ฐฐํฌ๊ฐ€ ๋˜์—ˆ๋Š”๋ฐ ES6 ES6์— ๋‹ค๋“ค ์ง‘์ฐฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

    • ๊ธฐ์กด์˜ ๋ฌธ์ œ๋“ค์„ ๋งค์šฐ ๊น”๋”ํ•˜๊ฒŒ ํ•ด๊ฒฐ
    • ๊ฐ€๋…์„ฑ, ์œ ์ง€ ๋ณด์ˆ˜์„ฑ์„ ๋ณด๊ฐ•ํ•˜๋Š” ๋ฌธ๋ฒ•์ด ๋Œ€๊ฑฐ ์ถ”๊ฐ€
    • ⇒ ๊ทธ์— ๋”ฐ๋ผ ์œ ๋ช… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๋„ ES6๋กœ ๋ฐ”๋€œ!
    • IE์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ Babel์„ ์ด์šฉํ•˜๋ฉด ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋„ ์—†์Œ

    ์ด๋Ÿฌํ•œ ๋ฒ ๋‹ˆํ•์œผ๋กœ ES6์— ํŠนํžˆ! ์ง‘์ฐฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

     

    ๐Ÿ‹ ๊ธฐ์กด ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹์˜ ๋ฌธ์ œ?


    ๋ฌธ์ œ 1. var ๋ณ€์ˆ˜๋Š” ์–ธ์ œ๋‚˜ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜์—ฌ ์ด์ „์—” ๋ช…๋ช… ๊ทœ์น™์„ ๋Œ€๋ฌธ์ž || _์–ธ๋”์Šค์ฝ”์–ด๋กœ๋งŒ ์ œํ•œํ•˜์˜€์Œ

    ๋ฌธ์ œ 2. var ๋ณ€์ˆ˜๋Š” ๊ฐ™์€ ๋ณ€์ˆ˜ ์žฌ์„ ์–ธ์„ ํ—ˆ์šฉํ•˜์—ฌ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ์–ด๋””์„œ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์ถ”์ ์ด ์–ด๋ ค์›Œ์ง.

    ๋ฌธ์ œ 3. var ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ๋‹จ์œ„์˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง. ๋ธ”๋ก ์™ธ๋ถ€์—์„œ if/for ๋ฌธ ๋ธ”๋ก ์™ธ๋ถ€์—์„œ๋„ var ๋ณ€์ˆ˜ ๋ณ€์ˆ˜ ์ ‘๊ทผ ๊ฐ€๋Šฅ

    function welcome(name){
        if (!name){
            var errMsg = "no name error!"
        }
        console.log(name);
        console.log(errMsg); // "no name error!". ํ•จ์ˆ˜ ๋‹จ์œ„์˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ ธ if ๋ธ”๋ก ์™ธ๋ถ€์—์„œ์—์„œ๋„ ๋ณ€์ˆ˜ ์ ‘๊ทผ ๊ฐ€๋Šฅ 
    }
    
    welcome();

    ๋ฌธ์ œ 4. ๋ณ€์ˆ˜ ์„ ์–ธ ์ „์— ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ํ˜ธ์ด์ŠคํŒ…* ๋ฐœ์ƒ

    (*ํ˜ธ์ด์ŠคํŒ…? ํ˜ธ์ด์ŠคํŒ…? ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋“ฑ ์„ ์–ธ๋ฌธ์„ ์ตœ์ƒ๋‹จ์˜ ์Šค์ฝ”ํ”„๋กœ ๋Œ์–ด์˜ฌ๋ ค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋จผ์ € ํ• ๋‹นํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด๋ถ€ ํ˜„์ƒ. ๋•Œ๋ฌธ์— var๋กœ ์„ ์–ธ๋œ ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” ์Šค์ฝ”ํ”„ ์„ ๋‘์—์„œ ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„๊ฐ€ ํ•œ ๋ฒˆ์— ์ด๋ฃจ์–ด์ ธ์„œ ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ ์ด์ „์— ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ. )

    console.log(foo); // undefined
    var foo;
    
    console.log(bar); // Error: Uncaught ReferenceError: bar is not defined
    let bar;

     

    ๐Ÿ‹ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ์„๊นŒ?


    ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹์ด ๋“ฑ์žฅํ•˜๊ฒŒ๋œ๋‹ค. let, const

    let์œผ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ๋ณ€์ˆ˜์˜ ์„ ์–ธ๊นŒ์ง€ ์ผ์‹œ์  ์‚ฌ๊ฐ์ง€๋Œ€ (Temporary Dead Zone)์ด๋ผ๋Š” ๋ฐ๋กœ ๋น ์ ธ์„œ ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋ฌธ ์ด์ „์— ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๊ฒŒ ๋จ. ๋˜ํ•œ let, const๋Š” ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๊ธฐ์— ์™ธ๋ถ€ ๋ธ”๋ก์—์„œ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€ํ•จ.

    function welcome(name){
        if (!name){
            let errMsg = "no name error!" // ๋ธ”๋ก ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€ 
        }
        console.log(name);
        console.log(errMsg); // Err: errMsg is not defined
    }
    
    welcome();

     

    ๐Ÿ‹ ํ•œ์ค„ ์š”์•ฝ


    ๋ณ€์ˆ˜์˜ ์„ ์–ธ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ const ์‚ฌ์šฉ, ์žฌํ• ๋‹น์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” let์„ ์‚ฌ์šฉํ•˜์ž.

    (ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ var๋ฅผ ์จ๋„ ๋ฌด๊ด€ํ•œ ๊ฒฝ์šฐ๋Š” ์žˆ์—ˆ๋‹ค ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ค„๋ณด๊ฒ ๋‹ค)

     

    ๐Ÿ‹ ๋‹ค์ด๋‚ด๋ฏน this ๋ฐ”์ธ๋”ฉ ์ด์Šˆ?


    ์ผ๋ฐ˜ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ๋ฉ”์„œ๋“œ๋กœ ํ˜ธ์ถœ๋˜๋А๋ƒ / ์•„๋‹ˆ๋ฉด ํ•จ์ˆ˜ ์ž์ฒด๋กœ ํ˜ธ์ถœ๋˜๋А๋ƒ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ this๊ฐ€ ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค.

    JS์˜ this๋Š” ์•„๋ž˜ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฐ’์ด ๋ฐ”์ธ๋”ฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์˜๋„๋œ ๋Œ€๋กœ ๋™์ž‘์‹œํ‚ค๊ธฐ ์œ„ํ•˜์—ฌ ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ์žฌ bind ์‹œ์ผœ์ฃผ์–ด์•ผ ํ•˜๋Š” ๋“ฑ ๋ถˆํŽธํ•˜๊ณ  ๊ฐ€๋…์„ฑ ๋‚˜์˜๊ฒŒ ๋งŒ๋“œ๋Š” ์›์ธ์ด ๋˜์—ˆ์Œ.

    // ๋ฉ”์†Œ๋“œ๋กœ ํ˜ธ์ถœํ•œ ๊ฒฝ์šฐ
    
    var nameCard = {
      name: "์†ก๊ฐ•",
      addClickEvent: function () {
        this.element = document.getElementById(this.name);
    
        var logName = function () {
          console.log("Hello! ", this);
        };
    
        // this.element.addEventListener("click", logName); // this.element ์ถœ๋ ฅ
            this.element.addEventListener("click", logName.bind(this)) // ํ•ด๋‹น ์‹คํ–‰๋ฌธ์˜ this(๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ๊ฐ์ฒด)๋กœ ์žฌ๋ฐ”์ธ๋”ฉ ์‹œ์ผœ์•ผํ•จ
      }
    };
    
    nameCard.addClickEvent();

     

    ๐Ÿ‹ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ์„๊นŒ?


    ํ•˜์ง€๋งŒ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ๋“ฑ์žฅ์œผ๋กœ, ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋  ์‹œ์ ์—์„œ ๋ฐ”๋กœ ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋กœ ๋ฐ”์ธ๋”ฉ ๋จ์œผ๋กœ์จ ์•„๋ž˜์ฒ˜๋Ÿผ ์™ธ๋ถ€ bind ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์–ด์กŒ๋‹ค.

    const nameCard = {
      name: "์†ก๊ฐ•",
      addClickEvent: function () {
        this.element = document.getElementById(this.name);
    
        var logName = () => { // ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์‹œ์ ์˜ ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋กœ ์ž๋™ ๋ฐ”์ธ๋”ฉ 
          console.log("Hello! ", this.name);
        };
    
        this.element.addEventListener("click", logName);
      }
    };
    
    nameCard.addClickEvent();

    โ€ป ๋‹จ, ์ฃผ์˜ โ€ป

    ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” new ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•จ. ํ•˜์ง€๋งŒ, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ.

    new ์—ฐ์‚ฐ์ž๋Š” ๋‹ค์Œ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฑฐ์ณ this๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์ฐธ์กฐํ•˜๋Š” this ๊ฐ’์ด ์‹คํ–‰๋ฌธ ์™ธ๋ถ€ ์ƒ๋‹จ์˜ this ๊ฐ’์ด๋ฏ€๋กœ ๋ณธ๋ฌธ ๋‚ด ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ถ”๊ฐ€๋  ์ˆ˜ ์—†์Œ.

    1. ๋นˆ {} ๊ฐ์ฒด๊ฐ€ this์— ํ• ๋‹น
      2. ๊ทธ ๊ฐ์ฒด์— ์ƒ์„ฑ์ž ๋‚ด ๋ณธ๋ฌธ์„ ์‹คํ–‰ํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ this๋ฅผ ์ˆ˜์ •
      3. this๋ฅผ ๋ฐ˜ํ™˜
    const Human = () => {};
    const human = new Human();

     

    ๐Ÿ‹ ํ˜ผ๋ˆ์˜ ํด๋ž˜์Šค ๊ตฌํ˜„


    ๊ธฐ์กด ES5์—๋Š” ํด๋ž˜์Šคํ˜• ๋ฌธ๋ฒ• ์—†์ด ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ํ™•์žฅํ•ด ํด๋ž˜์Šค๋ฅผ ํ‰๋‚ด๋‚ด์–ด์™”์Œ.

    ์ด๋Š” ์•„๋ž˜ ์˜ˆ์ œ์ฒ˜๋Ÿผ Person์ด ์ผ๋ฐ˜ ํ•จ์ˆ˜์ธ์ง€, ํด๋ž˜์Šค ์ƒ์„ฑ ํ•จ์ˆ˜์ธ์ง€ ํ˜ผ๋ˆ์„ ์ผ์œผํ‚ค๊ณ , ๋ฉ”์„œ๋“œ๊ฐ€ ๋‚ด๋ถ€์— ์บก์Аํ™”๋˜์ง€ ์•Š์•„์„œ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง.

    // ES5
    function Person(name){
        this.name = name;
    }
    
    Person.prototype.sayHi = function(){
        console.log("Hi" + this.name);
    }
    
    var ์†ก๊ฐ• = new Person("์†ก๊ฐ•");

     

    ๐Ÿ‹ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ์„๊นŒ?


    ํด๋ž˜์Šค ๋ฌธ๋ฒ•์„ ๋ณด๋ฉด ํด๋ž˜์Šค ์ƒ์„ฑ ํ•จ์ˆ˜์ž„์ด ๋ถ„๋ช…ํžˆ ๋ณด์ด๊ณ  ์บก์Аํ™”๋œ ๋ชจ๋“ˆ๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.

    // ES6
    class Person {
        constructor(name){
            this.name = name;
        }
        sayHi(){
            console.log("Hi" + this.name);
        }
    }
    
    const ์†ก๊ฐ• = new Person("์†ก๊ฐ•");

     

    ๐Ÿ‹ ๊ทธ ์™ธ ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ๋“ค


    ๊ฐ„๋‹จํ•˜๊ณ  ํŽธํ•œ ๊ฒŒ ์ข‹์•„!

    a. ๋ฆฌํ„ฐ๋Ÿด

    key์™€ value ๋ฆฌํ„ฐ๋Ÿด์ด ๊ฐ™๋‹ค๋ฉด ํ•œ ๋ฒˆ๋งŒ ์ž…๋ ฅ ๊ฐ€๋Šฅ!

    const dict = {name}; // == name:name

    ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด

    console.log(`Hello ${brandName} ${productName}!`);

    rest ํŒŒ๋ผ๋ฏธํ„ฐ / spread ํ‘œํ˜„์‹:
    (name, …rest) ⇒ {console.log(rest)} / […obj]
    ์ถ•์•ฝํ˜• ๋ฉ”์„œ๋“œ

    // ES5
    var nameCard = {
        name: "์†ก๊ฐ•",
        logName: function(){}
    }
    
    // ES6
    var nameCard = {
        name: "์†ก๊ฐ•",
        logName(){}
    }

     

    b. ๊ตฌ๋ถ„ํ•  + ์ธํ’‹ ๋””ํดํŠธ๊ฐ’ ํ• ๋‹น(Optional ์ฒ˜๋ฆฌ)

    ์•„๋ž˜ ์˜ˆ์ œ์ฒ˜๋Ÿผ ์ธํ’‹์— ๋””ํดํŠธ ๊ฐ’์„ ํ• ๋‹นํ•˜๊ณ  ๊ตฌ๋ถ„ํ• ๋กœ ๊ฐ’์„ ํŽธํžˆ ๊บผ๋‚ด์ค„ ์ˆ˜ ์žˆ์Œ.

    function logHuman({
        name = '์†ก๊ฐ•', 
        age = 23,
        size = {
            height: {hand: 0, feet: 0}, 
            weight: {head: 0, body: 0}
        }   
    } = {}) {
      console.log(name, size.weight.head);
    }
    
    logHuman({
      size: {height: {hand: 18, feet: 30}},
      name: "์†ก๊ฐ•ํ˜ธ"
    });

    ๋‹จ! ์˜ˆ์ œ์ฒ˜๋Ÿผ ์ธํ’‹๊ณผ 2-depth ์ธํ’‹์ด๋ฉด์„œ, ๋ณด๋‚ด๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ size์— weight์€ ์ •์˜ํ•ด ์ฃผ๊ณ  height์€ ์ •์˜ํ•ด์ฃผ์ง€ ์•Š์€ ์ฑ„๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒฝ์šฐ,
    ๋งค๊ฐœ๋ณ€์ˆ˜์—” ๋””ํดํŠธ ๊ฐ’์ด ์„ค์ •๋˜์ง€ ์•Š์€ ์ฑ„ ๋ณด๋‚ด์ค€ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋Š”๋ฐ → size.weight์€ undefined ์ด๋ฏ€๋กœ weight.body ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฝ์œผ๋ ค ํ•˜๊ฒŒ ๋˜๋ฉด ์ฐธ์กฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.?.์œผ๋กœ ์˜ต์…”๋„ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

     

    c. ์ œ๋„ˆ๋ ˆ์ดํ„ฐ Generator

    ์„ ์–ธ๋ฐฉ๋ฒ•? Generator ์ƒ์„ฑ์ž || function* ์‚ฌ์šฉ.
    ์‹คํ–‰ ์‹œ yield๋ฅผ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ์ฝ”๋“œ ์ˆ˜ํ–‰ → ๋‹ค์Œ ๋ผ์ธ์œผ๋กœ ๋„˜์–ด๊ฐ. → ์žฌ๊ฐœ (์ œ๋„ˆ๋ ˆ์ดํ„ฐ. next()) → ๋‹ค์Œ yield๋ฅผ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ์ˆ˜ํ–‰

    // ES6
    function* gen(){
        yield 1;
        yield 2;
        yield 3;
        yield 4;
        yield 5;
    }
    
    const g = gen();
    
    console.log(g.next()); // { value: 1, done: false }
    console.log(g.next()); // { value: 2, done: false }
    console.log(g.next()); // { value: 3, done: false }
    console.log(g.next()); // { value: 4, done: false }
    console.log(g.next()); // { value: 5, done: false }
    console.log(g.next()); // { value: undefined, done: true }. done: true == ์ข…๋ฃŒ.

     

    d. Named export
    ํ•œ ๋ชจ๋“ˆ ์•ˆ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด export๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ๋ชจ๋“ˆ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.

    export {human1, human2, human3}; // export 
    export default humanDefault 
    
    import {human1, human2, human3} __ from; // export 
    
    import humanDefault from __; // export default
    
    import {human1 as a, human2 as b, human3 as c} from __; // ๊ฐ ๋ชจ๋“ˆ์— alias 
    
    import * from __; // ์ „์ฒด ๋ชจ๋“ˆ import ํ›„ ๊บผ๋‚ด ์“ฐ๊ธฐ __.๋ชจ๋“ˆ1

     

    e. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

    ES5์˜ ์ฝœ๋ฐฑ ์ง€์˜ฅ์„ ES6์—์„  ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

    1. Promise / then
      ์ฃผ๋กœ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•  ๋•Œ ์‚ฌ์šฉ.
      promise์˜ ์„ธ ๊ฐ€์ง€ ์ƒํƒœ: pending (๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ), fulfilled (๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์–ด ํ”„๋กœ๋ฏธ์Šค๊ฐ€ ๊ฒฐ๊ด๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด ์ค€ ์ƒํƒœ)/ rejected (๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ์ƒํƒœ).
    const p = new Promise((resolve, reject) => {
        // ์„ฑ๊ณตํ•˜๋ฉด
        resolve(๊ฒฐ๊ณผ๊ฐ’);
        // ์‹คํŒจ
        reject(์‹คํŒจ);
        // ์—๋Ÿฌ
        throw new Error('์—๋Ÿฌ');
    
    });
    
    p.then(onFullFilled, onRejected).catch(errorCallback);

    1.1. ๋‹ค์ค‘ ํ”„๋กœ๋ฏธ์Šค ์ฒ˜๋ฆฌ
    ํ”„๋กœ๋ฏธ์Šค๋Š” ๋‹จ์ผ ๋น„๋™๊ธฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ, ์•„๋ž˜์ฒ˜๋Ÿผ Promise.all์ด๋‚˜ Promise.race๋ฅผ ์‚ฌ์šฉํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋น„๋™๊ธฐ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    var p1 = "promise ๋ฐ˜ํ™˜ api...์š”์ฒญ"
    var p2 = 1337;
    var p3 = "promise ๋ฐ˜ํ™˜ api...์š”์ฒญ"
    
    Promise.all([p1, p2, p3]).then(values => { 
      console.log(values); // ๋ชจ๋“  ํ”„๋กœ๋ฏธ์Šค๊ฐ€ resolve๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜
    });
    
    Promise.race([p1, p2, p3]).then(value => { 
      console.log(value); // ๊ฐ€์žฅ ๋จผ์ € resolve๋Š” ๊ฐ’ ๋ฐ˜ํ™˜
    });
    1. async / await
      ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค. async / await์„ ์“ฐ๋ฉด ๊ฐ€๋…์„ฑ๋„ ์ข‹๊ณ  ์ดํ•ดํ•˜๊ธฐ๋„ ํŽธํ•ด ๋ณด์ž„.
    2. async function ํ•จ์ˆ˜(){ try { await... // ๋น„๋™๊ธฐ์ฒ˜๋ฆฌํ•  ๊ตฌ๋ฌธ } catch(err) { } }

    ์ž... async-await ์ด ๊ฐ€๋…์„ฑ์ด ์ข‹๋‹ค๋ฉด, promise-then์€ ์™œ ๊ณ„์† ์“ธ๊นŒ?
    async-await์ด ๋Œ€๊ฐœ ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€๋งŒ, then ์ฒ˜๋ฆฌ๊ฐ€ ๋” ํŽธํ•œ ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์—ฐ์†์ ์ธ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ + ๊ฐ ๊ตฌ๋ฌธ๋งˆ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ๋กœ์ง์„ ์ ์šฉํ•˜๋Š” ๊ฒฝ์šฐ.

    // then์„ ์“ฐ๋Š” ๊ฒฝ์šฐ...
    const multiplyWithPromise = () => {
        const promise = new Promise((resolve, reject) => {
          setTimeout(() => resolve(1), 1000); // (*)
        }).then((result) => { // (**)
          console.log(result); // 1
          return result * 2;
        }).then((result) => { // (***)
          console.log(result); // 2
          return result * 2;
        }).then((result) => {
          console.log(result); // 4
          return result * 2;
        });
        return promise;
    }
    
    multiplyWithPromise();

     

     

    ์ฐธ๊ณ ์ž๋ฃŒ:
    https://ko.javascript.info/arrow-functions
    https://ui.toast.com/fe-guide/ko_ES5-TO-ES6
    https://sumini.dev/til/006-ecmascript/

Designed by Tistory.