본문 바로가기
( ´・・)/개발

[JavaScript] 구조 분해 할당 (Destructuring assignment)

by shinsangah 2023. 5. 1.

구조 분해 할당 (Destructuring assignment)

// 구조 분해 할당 (Destructuring assignment)
: 배열 데이터와 객체 데이터에서 사용할 수 있다.
배열 데이터 혹은 객체 데이터의 구조를 분해해서 그 구조에 맞게 각각의 변수에 맞게 데이터를 할당하는 것.

let a = 0;
let b = 0;
let c = 0;

let 이라는 키워드를 통해서 a, b, c가 만들어져있고,
let 키워드를 통해서는 각각의 변수에 데이터를 재할당할 수 있기 때문에.

const arr = [1, 2, 3]
;[a, , c] = arr; // 배열 구조분해할당 문법
특정한 키워드를 사용하지 않고, 바로 괄호가 나오는 코드에서 예외적으로 세미콜론을 사용한다는 개념으로 작성할 수 있다.
대괄호나 소괄호를 시작할 때는 앞에다가 ; (세미콜론) 붙여서 시작하는 방식으로 사용할 수 있다.
ex) ;[] ;()

console.log(a, c);


let a = "Apple";
let b = "Mango";
let c = "Grass";

const arr = ["tea", "juice", "food"];
배열 데이터를 취급할 때는 배열 데이터 안에 들어있는 각각의 아이템 순서가 굉장히 중요!
[, , c] = arr;
언뜻 굉장히 이상해보이는 문법처럼 보이지만, 문제가 없는 코드.

console.log(c); // food
console.log(a, b, c); // Apple Mango food


const arr = [1, 2, 3];
const [a, rest] = arr;

console.log(a, rest); // 1, 2


const arr = [1, 2, 3];
const [a, ...rest] = arr;
... 전개연산자 사용했기 때문에 하나의 '배열' 데이터 형태로 출력됨.

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


const arr = [1, 2, 3];
const [a, ...xyz] = arr;
rest 라고 사용안해도 어디까지나 단순 변수의 이름이기 때문에 마음대로 지어도 됨.

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


const obj = {
  a: 1,
  b: 2,
  c: 3,
};

const a = obj.a;
const b = obj.b;
const c = obj.c;

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

✔️ 구조분해할당은 객체데이터와 배열데이터에서 쓴다.

const obj = {
  a: 1,
  b: 2,
  c: 3,
};

const { a, b } = obj;
console.log(a, b); // 1 2

const { c } = obj;
console.log(c); // 3

→ obj 객체의 key 값을 { } 안에 넣어주고, 콘솔에 찍으면 해당 value 값이 출력이 된다. 굉장히 편함!

console.log(obj); // {a: 1, b: 2, c: 3}

const { x } = obj;
console.log(x); // undefined
// obj 객체에 x 라는 것 없기 때문에 undefined 뜸.

const obj = {
  a: 1,
  b: 2,
  c: 3,
};

const { x = 4 } = obj;
console.log(x); // (x: 5가 위에 없으면 4가 나옴.)


  a: 1,
  b: 2,
  c: 3,
  x: 5,
};

const { x = 4, a } = obj;
console.log(x, a); // 5 1 (x: 위에 x:5 있어서 그대로 5 출력됨.)


const obj = {
  a: 1,
  b: 2,
  c: 3,
  x: 5,
};

const { x = 4, a: hero, y: ten = 10 } = obj;
// a 라는 변수를 hero 라는 변수의 이름으로 변경하는 것!
// ten : key, 10 : value 지정
console.log(x, hero, ten); // 5 1 10


const obj = {
  a: 1,
  b: 2,
  c: 3,
  x: 5,
};

// 객체 구조 분해 할당
const { c, rest } = obj;
console.log(c, rest); // 3 undefiend (rest 라는 속성을 찾을 수 없기 때문에)


const obj = {
  a: 1,
  b: 2,
  c: 3,
  x: 5,
  y: 1000,
};

const { c, ...rest } = obj;
console.log(c, rest); // 3 {a: 1, b: 2, x: 5, y: 1000}