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 |