본문 바로가기
개발일지/JavaScript

[22] 구조 분해 할당 (Destructuring)

by 꾸주니=^= 2024. 11. 27.

구조 분해 할당(Destructuring)

구조 분해 할당은 ES6에서 도입된 문법으로, 배열이나 객체의 속성을 간단히 추출하여 개별 변수에 할당할 수 있게 해줍니다.
이를 통해 코드가 간결해지고 읽기 쉬워지며, 클린 코드를 작성할 수 있습니다.

 

1. 기본 개념

  • 배열 구조 분해 할당: 배열의 요소를 개별 변수에 쉽게 할당.
  • 객체 구조 분해 할당: 객체의 속성을 개별 변수에 쉽게 할당.

 

 


예제 1: 기본 객체 할당

예제에서는 unicorn 객체가 있고, 이 객체의 속성(accessory, animal, color)을 각각 변수로 추출합니다.

const unicorn = {
  accessory: 'horn',
  animal: 'horse',
  color: 'purple',
};

const { accessory, animal, color } = unicorn;

console.log(accessory); // horn
console.log(animal);    // horse
console.log(color);     // purple

작동 방식:

  • 객체의 key를 기준으로 변수를 선언하고, 해당 값을 변수에 매핑합니다.
  • 구조 분해를 통해 기존 unicorn.accessory처럼 작성하지 않아도 됩니다.

 


예제 2: 클린 코드 작성

설명:

  • 구조 분해 할당은 클린 코드를 작성하는 데 유용합니다.
  • 예제에서는 기존의 방식과 구조 분해 할당 방식을 비교하고 있습니다.

 

(1) 기존방식

function buildAnimal(animalData) {
  let accessory = animalData.accessory;
  let animal = animalData.animal;
  let color = animalData.color;
  let hairType = animalData.hairType;

  console.log(accessory, animal, color, hairType);
}

 

(2) 구조 분해 할당 방식

function buildAnimal(animalData) {
  let { accessory, animal, color, hairType } = animalData;

  console.log(accessory, animal, color, hairType);
}

 

결과:

  • 구조 분해 할당을 사용하면 변수를 선언하는 코드가 간결해지고 명확하게 작성됩니다.
  • 클린 코드의 핵심은 간결함과 가독성인데, 구조 분해 할당이 이를 크게 개선합니다.

 

 


예제 3: 깊은 객체 구조 분해

설명:

  • 객체 속의 객체까지 구조 분해할 수 있습니다.
  • 예제에서는 person 객체의 address 속성에서 zipcode, street, number를 변수로 추출합니다.
let person = {
  name: 'Maya',
  address: {
    zipcode: 1234,
    street: 'rainbow',
    number: 42,
  },
};

let {
  address: { zipcode, street, number },
} = person;

console.log(zipcode); // 1234
console.log(street);  // rainbow
console.log(number);  // 42

작동 방식:

  • 객체 내부의 객체를 구조 분해로 접근하여 하위 속성을 바로 변수로 추출합니다.
  • 중첩된 객체에서도 필요한 속성을 바로 추출할 수 있습니다.
  • address는 따로 변수로 선언되지 않고, 내부 속성만 추출됩니다.

 

 


예제 4: 배열 구조 분해 할당

설명:

  • 배열의 요소를 변수에 할당할 수 있습니다.

 

(1) 기본 할당

: 기존 배열의 값을 각각 변수로 추출하는 방식

let [a, b] = [10, 20];

console.log(a); // 10
console.log(b); // 20

//나머지 요소 추출
let [a, b, ...rest] = [10, 20, 30, 40, 50];

console.log(a);    // 10
console.log(b);    // 20
console.log(rest); // [30, 40, 50]

 

(2) 기존 방식과의 비교

:기존 배열의 값을 각각 변수로 추출하는 방식

const week = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'];

const day1 = week[0];
const day2 = week[1];
const day3 = week[2];

 

(3) 구조 분해 할당 방식

const week = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'];

const [day1, day2, day3, day4, day5] = week;

console.log(day1); // monday
console.log(day2); // tuesday
console.log(day3); // wednesday

포인트:

  • 배열에서도 구조 분해 할당을 사용하면 간결하게 값을 추출할 수 있습니다.
  • ...rest를 사용하면 나머지 값들을 별도로 배열로 저장할 수 있습니다.

 


1. 생략 가능

  • 배열의 특정 인덱스만 추출할 수 있습니다.

2. 기본값 설정

  • 기본값을 설정하면 값이 없을 경우 대체값으로 할당됩니다.

3. 변수 이름 변경

  • 객체 구조 분해 시 변수 이름을 변경할 수 있습니다.

 


사용 사례

  • 복잡한 데이터 구조에서 유용:
    • 예제에서는 people 배열 내부의 객체를 반복문으로 순회하며 name과 father를 추출합니다.

포인트:

  • 반복문에서 구조 분해를 사용하면 복잡한 데이터를 간결하게 처리할 수 있습니다.
  • 중첩된 데이터 구조에서도 필요한 값만 추출 가능합니다.

'개발일지 > JavaScript' 카테고리의 다른 글

[24] Map, Filter, Reduce  (0) 2024.11.27
[23] 전개 연산자(Spread Operator)  (0) 2024.11.27
[21] Closure  (0) 2024.11.26
[20] Event Loop  (0) 2024.11.26
[19] 조건부 삼항 연산자  (0) 2024.11.26