반응형
const object = { a: 1, b: 2 };
const { a, b } = object;
console.log(a);
console.log(b);
// 1
// 2
비구조화 할당 문법을 사용해서 object 객체의 a와 b를 바깥으로 꺼내어 출력해주는 코드이다.
const object = { a: 1, b: 2 };
function print({ a, b }) {
console.log(a);
console.log(b);
}
print(object);
// 1
// 2
함수에서도 비구조화 할당을 사용할 수 있다.
const object = { a: 1 };
function print({ a, b = 2 }) {
console.log(a);
console.log(b);
}
print(object);
// 1
// 2
함수에서와 같은 방법으로 객체에 b가 존재하지 않을 경우에 출력을 위한 default값 설정도 가능하다.
const object = { a: 1 };
const { a, b = 2 } = object;
console.log(a);
console.log(b);
비구조화 할당을 함수에서만 사용 가능한 것은 아니다. 다음과 같이도 사용할 수 있다.
다음으로 비구조화 할당을 할 때 이름을 바꾸는 방법에 대해 알아보자.
const animal = {
name: "멍멍이",
type: "개",
};
// const nickname = animal.name;
const { name: nickname } = animal;
console.log(nickname);
console.log(animal);
// 멍멍이
// { name: '멍멍이', type: '개' }
6번 줄과 7번줄은 같은 의미이다. 하지만 이렇게 한다고 해서 기존의 animal이 바뀌는 것이 아니라는 것을
10번 줄의 출력을 보고 알 수 있다.
const array = [1, 2];
const [one, two] = array;
console.log(one);
console.log(two);
배열에서도 비구조화 할당을 할 수 있다. 변수 one과 two에 1, 2가 각각 들어간 것이 확인된다.
객체의 깊숙한 곳에 들어있는 값 꺼내기
const deepObject = {
state: {
information: {
name: "velopert",
languages: ["korean", "english", "chinese"],
},
},
value: 5,
};
다음과 같은 객체에서 가장 깊숙히 있는 name, languages와 value를 꺼내는 방법을 알아보자.
const { name, languages } = deepObject.state.information;
const { value } = deepObject;
const extracted = {
name,
languages,
value,
};
console.log(extracted);
// {
// name: 'velopert',
// languages: [ 'korean', 'english', 'chinese' ],
// value: 5
// }
이는 비구조화 할당을 두 번 해서 꺼내는 방법이다.
const {
state: {
information: { name, languages },
},
value,
} = deepObject;
const extracted = {
name,
languages,
value,
};
console.log(extracted);
// {
// name: 'velopert',
// languages: [ 'korean', 'english', 'chinese' ],
// value: 5
// }
이는 비구조화 할당을 한 번 사용하는 것인데, 두 번 사용했을 때보다 더 길이도 길고, 지저분해 보인다.
경우에 따라 두 가지 경우를 적절하게 사용하는 것이 아주 좋지만, 첫 번째 방법을 좀 더 추천한다.
비구조화 할당의 다양한 사례에 대해 알아보았다. 비구조화 할당을 잘 할줄 안다면 코드를 더 깔끔하게 작성하는데
도움이 된다. 쓸 수 있는 상황에서는 쓰는 것이 좋겠지만 그렇다고 과하게 사용하는 것은 좋지 않을 수 있다.
반응형
'JavaScript' 카테고리의 다른 글
JavaScript: 비동기 처리, Promise, async/await, Promise.all, Promise.race (0) | 2021.07.19 |
---|---|
JavaScript: spread와 rest (...) (0) | 2021.07.14 |
JavaScript: 단축 평가 논리 계산법(Short-circit evaluation) (0) | 2021.07.14 |
JavaScript: 프로토타입과 클래스 (0) | 2021.07.09 |
JavaScript: 배열 내장함수 (forEach, map, indexOf, findIndex, find, filter, splice, splice, shift, pop, unshift, push, concat, join, reduce) (0) | 2021.07.08 |