디스트럭처링 할당(Destructuring assignment, 구조 분해 할당)
디스트럭처링 할당은 구조화된 배열 또는 객체를 destructuring하여 1개 이상의 변수에 개별적으로 할당하는 것
배열, 객체 리터럴에서 필요한 값만을 추출하여 변수에 할당할 때 유용하다.
1. 배열 디스트럭처링 할당
1 | // ES5 |
할당 연산자 왼쪽에 값을 할당 받을 변수를 선언해야 한다. (배열리터럴)
할당의 기준은 배열의 인덱스이다.
변수와 배열 요소의 개수가 반드시 일치할 필요는 없다.
변수에 기본값을 설정할 수 있다.
Rest 파라미터와 유사하게 Rest 요소를 사용할 수 있다.
1
2const [x, ...y] = [1, 2, 3];
console.log(x, y); // 1 [2, 3]
2. 객체 디스트럭처링 할당
ES5, 프로퍼티 키를 이용해서 프로퍼티를 디스트럭처링하여 변수에 할당
1 | // ES5 |
프로퍼티 키를 기준으로 디스트럭처링 할당이 이루어지고, 순서는 의미없다.
다른 변수 이름으로 프로퍼티 값을 할당받을 수 있다.
변수에 기본값을 설정할 수 있다.
프로퍼티 키로 객체에서 필요한 프로퍼티 값만을 추출할 수 있다.
객체를 인수로 전달받는 함수의 매개변수에도 사용할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31const todo = { id: 1, content: 'HTML', completed: true };
const { id } = todo;
console.log(id); // 1
function printTodo(todo) {
console.log(`할일 ${todo.content}은 ${todo.completed} ? '완료' : '바완료') 상태입니다.`);
}
printTodo({ id: 1, content: 'HTML', completed: true });
// 할일 HTML은 완료 상태입니다.
//
//
// 배열의 요소가 객체인 경우, 배열 디스트럭처링 할당과, 객체 디스트럭처링 할당 혼용 가능
const todos = [
{ id: 1, content: 'HTML', completed: false },
{ id: 2, content: 'CSS', completed: false },
{ id: 3, content: 'javaScript', completed: true }
];
const [, { id }] = todos;
console.log; // 2
//
// 중첩 객체의 경우
const user = {
name: {
lastName: 'jung',
firstName: 'hoyoung'
}
};
const { name: { lastName }} = user;
console.log(lastName); // jungRest 파라미터와 유사하게 Rest 프로퍼티를 사용할 수 있다.
1
2const { x, ...rest } = { x: 1, y: 2, z: 3 };
console.log(x, rest); // 1 { y: 2, z: 3 }