관리 메뉴

프론트엔드 정복하기

ES6문법 | 구조분해할당 (Destructure Assignment) 본문

ES6 & CommonJS

ES6문법 | 구조분해할당 (Destructure Assignment)

GROWNFRESH 2021. 3. 10. 09:52

구조 분해 할당(Destructuring Assignment) 구문은 배열이나 객체의 속성을 해체해서 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식이다. 

var foo = ["one", "two", "three"];

var [one, two, three] = foo;


console.log(one); // "one"
console.log(two); // "two"
console.log(three); // "three"

 


배열 구조 분해

 

변수에 기본 값을 할당하면, 분해한 값이 undefined일 때 그 값을 대신 사용한다. (객체도 동일)

var a, b;

[a=5, b=7] = [1];


console.log(a); // 1
console.log(b); // 7

 

 

 

필요하지 않은 반환 값을 무시할 수도 있다.

function f() {
  return [1, 2, 3];
}

var [a, , b] = f();


console.log(a); // 1
console.log(b); // 3

 

 

 

배열을 구조 분해할 경우, 나머지 구문을 이용해 분해하고 남은 부분을 하나의 변수에 할당할 수 있다.  (객체도 동일)

var [a, ...b] = [1, 2, 3];

console.log(a); // 1
console.log(b); // [2, 3]

객체 구조 분해

var o = {p: 42, q: true};
var {p, q} = o;

console.log(p); // 42
console.log(q); // true

 

** 참고

변수 선언과 분리해서 객체 리터럴 비구조화 할당을 할수는 없다. 그리하려면 괄호를 사용해야 함.

// 잘못된 예
{a, b} = {a:1, b:2}

//올바른 예
var a, b;

({a, b} = {a: 1, b: 2});

 

 

 

새로운 변수 이름으로 할당하기

var o = {p: 42, q: true};
var {p: foo, q: bar} = o;

console.log(foo); // 42
console.log(bar); // true

** ex) 함수 컴포넌트에서 component 인자를 받아오고 활용할 때 대문자로 시작하는 'Component' 로 써야 한다면,

function App({component:Component}){
  return(
    <Component />
  )
}

 

 

 

변수에 기본 값을 할당하면, 분해한 값이 undefined일 때 그 값을 대신 사용한다. (배열도 동일)

var {a = 10, b = 5} = {a: 3};

console.log(a); // 3
console.log(b); // 5

 

 

 

rest 속성은 구조 분해 패턴으로 걸러지지 않은 열거형 속성의 키를 가진 나머지 항목들을 모은다.

let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40}

a; // 10
b; // 20
rest; // { c: 30, d: 40 }

 

 

 

*참고문헌 - MDN

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

 

 


배열 디스트럭쳐 간편 정리

 

let x, y, z;


/* Basic */
[x, y] = [1, 2];
console.log(x, y); // 1 2


/* 배열의 개수 - 적은 경우 */
[x, y] = [1];
console.log(x, y); // 1 undefined


/* 배열의 개수 - 더 많은 경우 */
[x, y] = [1, 2, 3];
console.log(x, y); // 1 2


// 기본값
[x, y, z = 3] = [1, 2];
console.log(x, y, z); // 1 2 3


/* 재할당 */
[x, y = 10, z = 3] = [1, 2];
console.log(x, y, z); // 1 2 3


/* spread 문법 */
[x, ...y] = [1, 2, 3];
console.log(x, y); // 1 [ 2, 3 ]

디스트럭쳐링 사용 예시

 

** ES6의 배열 디스트럭처링은 배열에서 필요한 요소만 추출하여 변수에 할당하고 싶은 경우에 유용하다.

아래의 코드는 Date 객체에서 년도, 월, 일을 추출하는 예제이다.

const today = new Date(); // Tue May 21 2019 22:19:42 GMT+0900 (한국 표준시)
const formattedDate = today.toISOString().substring(0, 10); // "2019-05-21"
const [year, month, day] = formattedDate.split('-');
console.log([year, month, day]); // [ '2019', '05', '21' ]

 

객체 디스트럭쳐링 예시

var metadata = {
    title: "Scratchpad",
    translations: [
       {
        locale: "de",
        localization_tags: [ ],
        last_edit: "2014-04-14T08:43:37",
        url: "/de/docs/Tools/Scratchpad",
        title: "JavaScript-Umgebung"
       }
    ],
    url: "/en-US/docs/Tools/Scratchpad"
};

var { title: englishTitle, translations: [{ title: localeTitle }] } = metadata;

console.log(englishTitle); // "Scratchpad"
console.log(localeTitle);  // "JavaScript-Umgebung"

 

 

 

 

** 참고

 

객체 디스트럭쳐링

developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

 

poiemaweb.com/es6-destructuring

'ES6 & CommonJS' 카테고리의 다른 글

JSX => Javascript 문법 변환기  (0) 2020.06.17
CommonJS vs ES6 모듈  (0) 2020.05.13