| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
- 달팽이는올라가고싶다
 - SOCKET
 - 17822
 - Ajax
 - boj
 - SWEA
 - 응답코드
 - 소형기관차
 - 백준
 - HTTP
 - GitHub
 - Java
 - 알고리즘
 - react
 - staged
 - npm
 - 파핑파핑지뢰찾기
 - 타겟넘버
 - web
 - 17471
 - node.js
 - Git
 - 1868
 - JSP
 - graph
 - commited
 - 카카오코드페스티벌
 - 비동기
 - 2869
 - JavaScript
 
- Today
 
- Total
 
devlog
[Javascript] 구조 분해 할당(destructuring) 본문

ES6에서 배열과 object를 조금 더 쉽게 다루는 방식이 추가됐다.
구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식이다.
구조 분해 연산자, 전개 연산자, 각 배열에 들어가 있는 데이터를 하나씩 가져와서 처리해야 되는 상황을 한 번에 처리할 수 있도록 해준다.
1. 객체 구조 분해 할당
아래는 객체 구조분해(destructuring)의 예시이다.
let obj = {
  name : "devlog",
  age : 1
};
let { name, age } = obj;
name과 age의 값을 확인해보면 각각 obj.name, obj.age의 값이 담긴 것을 확인해볼 수 있다.
객체를 구조분해 할 때 주의해야 할 것은 우선 할당 연산자의 왼쪽에 객체리터럴이 와야 하고,할당 연산자의 오른쪽에 오는 값이 null이나 undefined여서는 안된다는 것이다.
그리고 구조 분해를 할 때 변수를 선언만 해서는 안되고 반드시 초기자(initializer)를 해줘야 한다.
2. 배열 분해 할당
배열의 값을 별도의 변수에 할당하려는 경우, destructuring을 통해 간단하고 깨끗하게 할당할 수 있다.
인덱스나 루프를 사용할 필요가 없다.
const array = ['a', 'b', 'c', 'd'];
const [first, second, third, fourth] = array;
console.log(first); 	 // Outputs 'a'
console.log(second);	 // Outputs 'b'
console.log(third);		 // Outputs 'c'
console.log(fourth);	 // Outputs 'd'
위와 같이 배열의 값들을 알아서 할당해준다.
이 문법은 배열 안에 있는 원소를 다른 이름으로 새로 선언해주고 싶을 때 사용하면 매우 유용하다.
객체 비구조화 할당과 마찬가지로, 기본값 지정이 가능하다.
3. 깊은 값 구조 분해 할당
const deepObject = {
  state : {
    information : {
      name : 'devlog',
      category : ['js', 'algorithm', 'java']
    }
  },
  age: 1
};
위와 같은 배열이 존재할 때, name, category 값들을 밖으로 꺼내고 싶다면 어떻게 해야 할까?
첫 번째 방법은 비구조화 할당 문법을 두 번 사용하는 것이다.
const deepObject = {
  state: {
    information : {
      name : 'devlog',
      category : ['js', 'algorithm', 'java']
    }
  },
  age : 1
};
const { name, category } = deepObject.state.information;
const { age } = deepObject;
const extracted = {
  name,
  category,
  age
};
console.log(extracted); // {name: "devlog", category: Array[3], age : 1}
위에서 extracted 객체를 선언할 때 사용한 방식은 아래와 같은 의미이다.
const extracted = {
  name : name,
  category : category,
  age : age
}
이번엔 두 번째 방법, 한 번에 모두 추출하는 방법을 알아보자.
const deepObject = {
  state : {
    information : {
      name : 'devlog',
      category : ['js', 'algorithm', 'java']
    }
  },
  age : 1
};
const {
  state : {
    information : { name, category }
  },
  age
} = deepObject;
const extracted = {
  name,
  category,
  age
};
console.log(extracted);
이렇게 하면 깊숙이 안에 들어있는 값도 객체에서 바로 추출할 수 있다.
'JavaScript' 카테고리의 다른 글
| [Jest] Javascript Test 코드 작성하기 (4) | 2019.11.29 | 
|---|---|
| [Javascript] 자바스크립트 엔진, Event Loop, Event Queue, Call Stack (0) | 2019.08.07 | 
| [Javascript] Promise 이해하기 (0) | 2019.08.01 | 
| [Javascript] callback(콜백) 개념 이해하기 (2) | 2019.07.17 | 
| [Javascript]자바스크립트 기초-변수와 상수(var,let,const) (2) | 2019.07.16 |