35. 구조 분해 할당
2026년 4월 14일
자바스크립트
📦 1. 배열 구조 분해 (Array Destructuring)
배열의 요소를 순서대로 변수에 할당합니다.
- 기본 사용법:
let [a, b] = ["First", "Second"]; - 요소 무시: 쉼표를 사용하여 필요 없는 요소를 건너뛸 수 있습니다.
let [name, , title] = ["Julius", "Caesar", "Consul"];(두 번째 요소 무시)
- 모든 이터러블 적용: 문자열(
"abc")이나Set같은 반복 가능한 객체라면 무엇이든 분해할 수 있습니다.
💡 유용한 트릭: 변수 값 교환
임시 변수 없이 한 줄로 두 변수의 값을 바꿀 수 있습니다.
[guest, admin] = [admin, guest];
🏠 2. 객체 구조 분해 (Object Destructuring)
객체의 프로퍼티를 키(key) 이름을 기준으로 변수에 할당합니다. 배열과 달리 순서가 중요하지 않습니다.
- 변수명 변경:
키: 새로운이름문법으로 다른 이름의 변수에 저장할 수 있습니다.let {width: w, height: h} = options;
- 기본값 설정: 객체에 해당 프로퍼티가 없을 때를 대비해 기본값을 정할 수 있습니다.
let {title = "Menu"} = options;
⚡ 3. 나머지 패턴 ... (Rest Pattern)
분해하고 남은 나머지 요소들을 한데 모아 새로운 배열이나 객체로 만들 수 있습니다.
- 배열:
let [name1, ...rest] = ["A", "B", "C"];→rest는["B", "C"]가 됨. - 객체:
let {title, ...rest} = options;→rest는title을 제외한 나머지 프로퍼티가 담긴 객체가 됨.
🧬 4. 중첩 구조 분해 (Nested Destructuring)
객체나 배열 안에 또 다른 객체나 배열이 있는 복잡한 구조도 한 번에 분해할 수 있습니다.
let options = { size: { width: 100, height: 200 }, items: ["Cake", "Donut"] }; let { size: { width, height }, items: [item1, item2] } = options;
🧠 5. 똑똑한 함수 매개변수
함수에 인수가 많거나 대부분이 선택 사항일 때 객체 구조 분해를 매개변수에 직접 적용하면 매우 편리합니다.
// 매개변수 단계에서 분해와 기본값 설정을 동시에 수행 function showMenu({title = "Untitled", width = 200} = {}) { // ... }
- 주의:
= {}를 끝에 붙여주면, 함수 호출 시 인수를 하나도 넘기지 않아도 에러가 발생하지 않습니다.
🎙️ 기술 면접 대비 (Interview Questions)
Q1. 구조 분해 할당을 사용하면 원본 배열이나 객체가 수정되나요? (기초)
답변: 아니요, 구조 분해 할당은 원본을 파괴하지 않는 비파괴적(Non-destructive) 연산입니다. 우측의 데이터를 복사하여 좌측의 변수들에 할당하는 방식이므로 원본 데이터는 그대로 유지됩니다.
Q2. 함수 매개변수에서 구조 분해 할당을 사용할 때 = {}와 같은 기본값을 설정하는 이유는 무엇인가요? (중급)
답변: 구조 분해 할당은 기본적으로 분해할 대상(인수)이 전달되었다고 가정합니다. 만약 함수를 호출할 때 인수를 아무것도 전달하지 않으면(
undefined), 엔진은undefined를 분해하려다TypeError를 발생시킵니다. 이를 방지하기 위해 빈 객체({})를 기본값으로 할당하여 안정성을 확보합니다.
Q3. 객체 구조 분해 시 let {a: b} = {a: 1}에서 실제 생성되는 변수는 무엇인가요? (기초)
답변: 실제 생성되는 변수는 **
b**입니다.a는 객체에서 찾을 프로퍼티 키를 나타내며, 그 키의 값을 변수b에 담겠다는 뜻입니다.
💡 기억해야 할 중요한 내용
- 가독성의 승리: 수많은
const name = user.name;줄을 한 줄의{ name } = user;로 줄이는 것만으로도 코드의 복잡도가 획기적으로 낮아집니다. - API 데이터 처리의 핵심: 서버에서 내려주는 거대한 JSON 객체에서 내가 필요한 필드만 뽑아낼 때 가장 강력한 위력을 발휘합니다.