쾌락코딩

destructuring(디스트럭처링)

|

디스트럭처링이란?

디스트럭처링이란, 객체의 구조(structure)를 제거(de)한다는 의미이다.

before destructuring

디스트럭처링은 es6에서 도입된 문법이다. 코드로 보는 것이 가장 효과적인 방법이다.

// es5  
const obj = { name: 'yongjun', age: 100 };

const name = obj.name;
const age = obj.age;

console.log(name, age); // yongjun 100

es5에서 obj의 name 속성과 age 속성을 가져오려면 이렇게 했어야 했다. 그러나 es6에서는 더 이쁘고 쉽게, 더 다양한 옵션을 주면서 이와 같은 작업을 할 수 있다.

const obj = { name: 'yongjun', age: 100 };

const { name, age } = obj;

console.log(name, age); // yongjun 100

이렇게 간단하게 할 수 있을 뿐만아니라 여러가지 팁이 더 존재한다.

// 디스트럭처링 할당 시 할당받을 속성이 없다면 새롭게 변수를 초기화 할 수 있다.
const { name, nationality="korea" } = { name:"yongjun" };
console.log(name, nationality); // yongjun korea

// 새로운 변수명으로 할당 받기
const { name: newName, nationality: newNationality } = { name: "yongjun", nationality: "korea" };
console.log(newName, newNationality); // youngjun korea

함수의 파라미터에서도 활용할 수 있다.

const showProfile = ({ name, nationality="none"}) => {
  console.log(name);
  console.log(nationality);
}

// showProfile은 꼭 객체가 할당되야 한다.
showProfile({name="elecoder" nationality="korea"}); // elecoder korea
showProfile({name="elecoder"}); // elecoder none

배열에서도 디스트럭처링이 가능하다.

let numbers = ["one", "two", "three", "four", "five"];

let [num1, num2] = numbers;
console.log(num1, num2); // one two

// 세번째 네번째 요소를 받고 싶다면 아래와 같이 하자
let [,,num3, num4] = numbers;
console.log(num3,num4); // three four

// spread 연산자와 함께하면 이런것도 가능하다
let [val1, ...vals] = numbers;
console.log(val1); // one
console.log(vals); // two three four five

Comments