ES6에서 추가된 또 다른 기능은 "Destructuring"이다.
배열과 객체(object)에서 요소들을 다른 변수에 저장하려면, 위와 같이 각각의 요소들을 하나씩 참조하는 방식을 써야 했다. ES6에서는 destructuring을 통해 완전히 같은 결과를 더 간편하게 얻을 수 있는데, perl과 python에서 가져온 개념이라고 한다. 다음과 같이 사용한다.
주의할 점은, 배열의 경우 순서를 지켜야 한다. 만약
let positions = ['Gabrielle', 'Jarrod', 'Kate', 'Fernando', 'Mike', 'Walter'];
let [first, second, third] = positions;
위와 같은 코드는 position라는 배열에서 1, 2, 3번째 요소를 각각 first, second, third라는 변수에 저장한다. 변수 이름이 first, second, third라서가 아니라, 빈 칸 없이 연달아 1, 2, 3번째를 채웠기 때문이다. 만약 1, 4, 6번째 요소를 가져오고 싶다면,
let [first, , , second, , third] = positions;
과 같이 하면 positions 배열에서 1, 4, 6번째 요소를 가져온다.
[ ]가 의미하는 것은 배열을 destructuring 한다는 뜻이며, [ ] 안에 들어가는 것은 "요소를 가져와 저장하는 변수의 이름" 일 뿐이다.
반면, 객체를 destructuring할 경우 property의 이름을 그대로 맞춰줘야만 해당 값을 가져올 수 있다.
※ 참조: Destructuring assignment (MDN)
Object literal shorthand
다음과 같이 object를 만든다고 하자.
let type = 'quartz';
let color = 'rose';
let carat = 21.29;
const gemstone = {
type: type,
color: color,
carat: carat
};
console.log(gemstone);
먼저 만들어진 변수들의 이름과 'gemstone' object의 property들의 이름이 같다. 이렇게 변수 이름과 property 이름이 같은 object를 만들 때, ES6에서는 코드를 간결하게 만드는 방법이 있다.
let type = 'quartz';
let color = 'rose';
let carat = 21.29;
const gemstone = { type, color, carat };
console.log(gemstone);
그냥 변수 이름만 써주면, 그대로 object가 생성된다!
만약 object에 메소드를 추가한다면, 원래는 다음과 같이 쓸 것이다.
let type = 'quartz';
let color = 'rose';
let carat = 21.29;
const gemstone = {
type,
color,
carat,
calculateWorth: function() {
// will calculate worth of gemstone based on type, color, and carat
}
};
ES6에서는 간단히 이렇게 해도 된다.
let gemstone = {
type,
color,
carat,
calculateWorth() {
...
}
};
익명 함수를 만들기 위해 function()를 따로 쓸 필요가 없다.
'Javascript' 카테고리의 다른 글
Javascript의 스코프(Scope)에 대한 이해 (0) | 2018.04.29 |
---|---|
[Javascript] Callbacks: forEach, map, filter (0) | 2018.04.14 |
First-Class Functions (1) | 2018.04.14 |
[ES6] for와 forEach, for...of / Spread... & ...Rest Operator (0) | 2018.03.16 |
[ES6] var와 let & const (1) | 2018.03.14 |
댓글