[JavaScript] ES6

๋ฐ•์ค€์„ยท2024๋…„ 4์›” 4์ผ

JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
8/10
post-thumbnail

ES6+

๐Ÿ’ก ES๋ž€ ECMAScript์˜ ์•ฝ์ž์ด๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ‘œ์ค€, ์ŠคํŽ™์„ ๋‚˜ํƒ€๋‚ด๋Š” ์šฉ์–ด์ด๋‹ค.

ES6๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ

  1. Variavle(let, const)
  2. Arrow Function(ํ™”์‚ดํ‘œ ํ•จ์ˆ˜)
  3. Template Literals
  4. Shorthand property names(ํ”„๋กœํผํ‹ฐ ์†์„ฑ ์ด๋ฆ„ ์ƒ๋žต)
  5. Destructuring Assignment(๋ฐฐ์—ด ๋ฐ ๊ฐ์ฒด ๋น„๊ตฌ์กฐํ™”)
  6. Rest destructuring
  7. Default Parameters (๊ธฐ๋ณธ ๋งค๊ฐœ ๋ณ€์ˆ˜)
  8. Optional Chaining (?. ๋ฌธ๋ฒ•)
  9. Array function (๋ฐฐ์—ด ์ถ”๊ฐ€ ๊ธฐ๋Šฅ)

1. Variavle

let, const ์ฐจ์ด๋กœ ์ ์–ด๋†“์€ ๋ธ”๋กœ๊ทธ ๊ธ€์ด ์žˆ๋‹ค.

2. Arrow Function

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์„ ์–ธ์‹์€ JavaScript ๊ฐœ๋ฐœ์ž์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด ๊ฐœ๋ฐœ ๋˜์—ˆ๋‹ค. ๊ธฐ์กด function ํ‘œํ˜„ ๋ฐฉ์‹ ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•จ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž์‹ ์˜ this, arguments, super๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

let foo =()=>{
    console.log("hello")
}

let zoo =()=>Date.now()

let koo = (a,b) =>{
    let result = a*b
    return result
}

let koo = (a,b) =>a*b

๊ธฐ์กด ํ•จ์ˆ˜๋ณด๋‹ค ๊ฐ„๋žตํ•ด์ง„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. retrun์„ ์—†์• ๋ฉด ๋” ๊ฐ„๋žตํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ ๋‹จ, return์„ ์—†์• ๋ ค๋ฉด {} ์™€ ๊ฐ™์ด ์ƒ๋žตํ•ด์•ผ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

  1. object์•ˆ์— ํ•จ์ˆ˜ ์ •์˜ ์‹œ
const person = {
    points: 23,
    score: function(){
       this.points++; // ์—ฌ๊ธฐ์—์„  ํ™”์‚ดํ‘œํ•จ์ˆ˜ ์“ฐ๋ฉด point๊ฐ€ ์ฆ๊ฐ€ ์•ˆํ•จ
    }
}
  1. ํ”„๋กœํ† ํƒ€์ž… ํ•จ์ˆ˜
class Car {
    constructor(make, color) {
       this.make = make;
       this.color = color;
    }
}
let hyundai = new Car("gildong","white")
Car.prototype.summary = function () {
    console.log( `This car is a ${this.make} in the colour ${this.colour}`)
} // ์—ฌ๊ธฐ์„œ ํ™”์‚ดํ‘œํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด ์•ˆ๋œ๋‹ค  hyundai.summary()โ€‹
  1. this
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ชจ๋“  ์ผ๋ฐ˜ํ•จ์ˆ˜๋Š” ์‹คํ–‰ ๋  ๋•Œ๋งˆ๋‹ค ํ•จ์ˆ˜ ๋‚ด๋ถ€์— this๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค. ์ด๋•Œ this๋Š” ์ด ํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅธ ๊ฐ์ฒด์ด๋‹ค. ๋˜, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜ํ•จใ……๊ตฌ๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์—†๋‹ค. ํŽธํ•˜๊ธด ํ•˜์ง€๋งŒ ๊ธฐ์กด ๋ฌธ๋ฒ•์„ 100% ๋Œ€์ฒดํ•  ์ˆ˜๋Š” ์—†๋‹ค.
let age = 20
var obj = {
 age:12,
 foo: function () {
   console.log(this.age)
  },
};
obj.foo()

3. Template Literals (ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด)

ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด์€ ES6๋ถ€ํ„ฐ ์ƒˆ๋กœ ๋„์ž…๋œ ๋ฌธ์ž์—ด ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ, ๋ฌธ์ž์—ด ์ƒ์„ฑ์‹œ ๋”ฐ์˜ดํ‘œ ๋Œ€์‹  ๋ฐฑํ‹ฑ(`)์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ์˜ดํ‘œ์™€ ๋‹ฌ๋ฆฌ ๋ฐฑํ‹ฑ์•ˆ์—์„œ๋Š” ์ค„๋ฐ”๊ฟˆ์ด ๋ฐ˜์˜๋œ๋‹ค. ๋˜ํ•œ, ๋ฌธ์ž์—ด ์‚ฌ์ด์— ๋ณ€์ˆ˜๋‚˜ ์—ฐ์‚ฐ์„ ๋„ฃ์„ ๋•Œ๋Š” "${}" ์‚ฌ์ด์— ํ‘œํ˜„์‹์„ ์‚ฝ์ž…ํ•œ๋‹ค.

var jsp = "์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ";

// ๊ธฐ์กด ์ฝ”๋“œ
console.log("์ด๊ฑด " + jsp + "์ž…๋‹ˆ๋‹ค.");

// ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹
console.log(`์ด๊ฑด ${jsp}์ž…๋‹ˆ๋‹ค.`);

// ์ถœ๋ ฅ ๊ฒฐ๊ณผ -> ์ด๊ฑด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.

4. Shorthand property names(ํ”„๋กœํผํ‹ฐ ์†์„ฑ ์ด๋ฆ„ ์ƒ๋žต)

object๋ฅผ ์„ ์–ธํ•  ๋•Œ ์†์„ฑ ์ด๋ฆ„๊ณผ ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ๋™์ผํ•  ๋•Œ ์ƒ๋žต์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ธฐ์กด ES5
const name = 'red';
const age = 18;

const obj = {
   name : name,
   age : age
};
  • ES6
const name = 'red';
const age = 18;

const obj = { name, age };
const obj2 = { name, age, hobby : '๋นจ๊ฐ•' };

์†์„ฑ ์ด๋ฆ„๊ณผ ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ๊ฐ™์„ ๋•Œ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์–ด ์ฝ”๋“œ๊ฐ€ ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•ด์กŒ๋‹ค.

5. Destructuring Assignment (๋ฐฐ์—ด ๋ฐ ๊ฐ์ฒด ๋น„๊ตฌ์กฐํ™”)

๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•  ๋•Œ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ธฐ์กด ES5
const obj = {
   name : name,
   age : age
};

let name = obj.name;
let age = obj.age;
  • ES6
const obj = {
   name : name,
   age : age
};

let {name, age} = obj;

ES6์—์„œ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์–ป๊ธฐ ์œ„ํ•ด ์ค‘๊ด„ํ˜ธ ์•ˆ์— ๋„ฃ์–ด์ฃผ๋ฉด ๊ฐ ๋ณ€์ˆ˜์— ๊ฐ’์„ ์•Œ์•„์„œ ํ• ๋‹นํ•ด์ค€๋‹ค. ์ด๋•Œ ๋ณ€์ˆ˜๋ช…๊ณผ key๋Š” ๋™์ผํ•ด์•ผ ํ•œ๋‹ค.

๋ฐฐ์—ด๋„ ๋™์ผํ•˜๋‹ค {}๋Œ€์‹  []์œผ๋กœ ๋ฌถ์–ด์„œ ์“ฐ๋ฉด๋œ๋‹ค.

const arr = ['apple', 'carrots', 'ggingggang', 'durian'];

let [ value1, value2, value3 ] = arr;

6. Rest destructuring

๋ฐฐ์—ด ์•ž์ชฝ์— ์œ„์น˜ํ•œ ๊ฐ’ ๋ช‡ ๊ฐœ๋งŒ ํ•„์š”ํ•˜๊ณ  ๊ทธ ์ดํ›„ ์ด์–ด์ง€๋Š” ๋‚˜๋จธ์ง€ ๊ฐ’๋“ค์„ ํ•œ๋ฐ ๋ชจ์•„์„œ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿด ๋•Œ๋Š” ์  ์„ธ๊ฐœ(...)๋ฅผ ๋ถ™์ธ ๋งค๊ฐœ๋ณ€์ˆ˜ ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‚˜๋จธ์ง€ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

let person = {
    name:"gildong",
    age:17,
    cute:true
}
let {name, ...rest} = person
console.log(rest) // {age:17, cute:true}

let array = [1,2,3]
let [a,...rest] = array console.log(rest)//[2,3]

7. Default Parameters (๊ธฐ๋ณธ ๋งค๊ฐœ ๋ณ€์ˆ˜)

ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์— ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ฒจ์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ธฐ๋Š” ๊ณผ์ • ์ค‘ undefiend๋กœ ์ธ์‹ํ•˜๊ฒŒ ๋˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ๊ณ„์†ํ•ด์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. ๋„˜๊ฒจ์ง€๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ undefiend๋กœ ์ธ์‹๋˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

  • ES5
const fn1 = (name, age) => {
	return `hi, my name is ${name}. my age is ${age}`;
};

console.log(fn1('carrots')); // hi, my name is carrots. my age is undefined
  • ES6
const fn1 = (name, age = 20) => {
	return `hi, my name is ${name}. my age is ${age}`;
};

console.log(fn1('carrots')); // hi, my name is carrots. my age is 20

ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๊ฐœ๋…์ธ ๊ฒƒ์ด๋‹ค.

8. Optional Chaining (?. ๋ฌธ๋ฒ•)

๊ฐ์ฒด๊ฐ€ ํŠน์ • ์†์„ฑ์ด ์—†์„ ๋•Œ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒํ–ˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ hasOwnProperty ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์†์„ฑ์ด ์žˆ๋Š”์ง€ ์ฒดํฌํ•˜๊ณ  ๋‹ค์Œ๋™์ž‘์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ํ–ˆ์–ด์•ผ ํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด์   ES6๋ถ€ํ„ฐ๋Š” ?๋ฅผ ์จ์„œ ์‰ฝ๊ฒŒ ์˜ค๋ฅ˜๋ฅผ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

  • ES5
const obj = { a : 1, b : 2 };
console.log(obj.c.innerC); //Uncaught TypeError: Cannot read properties of undefined (reading 'innerC')

if (obj.hasOwnProperty('c')) { // c ์†์„ฑ์ด ์žˆ๋Š”์ง€ ์ฒดํฌ
    if (obj.c.hasOwnProperty('innerC')) { // innerC๊ฐ€ ์žˆ๋Š”์ง€ ์ฒดํฌ
        console.log(obj.c.innerC); // ์ถœ๋ ฅ;;
    }
}
  • ES6
const obj = { a : 1, b : 2 };
console.log(obj?.c?.innerC); //undefined

9. Array function (๋ฐฐ์—ด ์ถ”๊ฐ€ ๊ธฐ๋Šฅ)

๊ธฐ์กด ES5 ์ฝ”๋“œ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•ด์กŒ๋‹ค.

๋ฐฐ์—ด๋กœ ์ด๋ฃจ์–ด ์ง€๋Š” ์ž‘์—…์ด ๋งŽ์•„์ง€๋‹ค ๋ณด๋‹ˆ ES6์ดํ›„ ๋ฐฐ์—ด์— ๋Œ€ํ•œ ๋‚ด๋ถ€ ๊ธฐ๋Šฅ์ด ๋งŽ์ด ์ถ”๊ฐ€๋๋‹ค.

  • map : ๋ฐฐ์—ด์„ ์ „๊ฐœํ•˜์—ฌ ์ž‘์—… ํ›„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ํ• ๋‹น
const array = ['apple', 'carrots', 'ggingggang', 'durian'];
const mapResult = array.map((item) => item.length);
console.log(mapResult); // [5, 7, 10, 6]
  • filter : ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๋ฅผ ์ฐพ์•„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ํ• ๋‹น
const array = [1, 5, 10, 13, 30, 42];
const filterResult = array.filter((item) => (item % 5 === 0));
console.log(filterResult); // [5, 10, 30]
  • reduce : ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ๋ฆฌ๋“€์„œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜
const array = [1, 5, 10, 13, 30, 42];
const reduceResult = array.reduce((pre, val) => pre + val); 

console.log(reduceResult); // 101
  • find/findIndex : ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ/๋ฐ์ดํ„ฐ index ์ฐพ๊ธฐ
const array = [1,2,3,4,5,5,5];
const findResult = array.find(item => item === 5);
const findResult2 = array.find(item => item === 7);
const findIndexResult = array.findIndex(item => item === 5);
const findIndexResult2 = array.findIndex(item => item === 7);

// find : ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜
// ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ : ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋งŒ return 
// ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ : undefined return
console.log(findResult); // 5
console.log(findResult2); // undefined

// findIndex : ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ index๋ฅผ ๋ฐ˜ํ™˜
// ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ : ์ฒซ๋ฒˆ์งธ ์š”์†Œ์˜ index return 
// ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ : -1 return
console.log(findIndexResult); // 4
console.log(findIndexResult2); // -1
  • some/every : ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ ์—ฌ๋ถ€์— ๋”ฐ๋ผ true/false ๋ฐ˜ํ™˜
const array = [1,2,3,4,5,5,5];
const someResult = array.some(item => item > 3);
const everyResult = array.every(item => item > 1);

// some : ์กฐ๊ฑด์ด ๋งž๋Š” ์š”์†Œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด true, ์—†์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜
console.log(someResult); // true

// every : ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ์กฐ๊ฑด์— ๋งž์œผ๋ฉด true, ์•„๋‹ˆ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜
console.log(everyResult); // false
  • flat : ์ค‘์ฒฉ ๋ฐฐ์—ด ์ฐจ์› ์ •๋ฆฌ / ๋นˆ๊ณต๊ฐ„ ์‚ญ์ œ
const array = [1, [2, 3], [4, 5]];
const array2 = ['carrots', 'apple', , , , , , , , 'durian'];

array.flat(1); // ์ค‘์ฒฉ ๋ฐฐ์—ด ์ฐจ์›์„ ๋งž์ถฐ์คŒ
console.log(array); // [1,2,3,4,5]

array2.flat(); // ๋นˆ ๊ฐ’ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ฆฌํ•ด์ค€๋‹ค.
console.log(array2); // ['carrots', 'apple', 'durian'];












์ฐธ์กฐ : https://velog.io/@carrotsman91/ES6-%EB%AC%B8%EB%B2%95

profile
๋А๋ฆฌ์ง€๋งŒ ํƒ„ํƒ„ํ•œ ๊ฐœ๋ฐœ์ž 1๋ช… ๋น ๋ฅธ ๊ฐœ๋ฐœ์ž 10๋ช… ์•ˆ๋ถ€๋Ÿฝ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€