티스토리 뷰

구조 분해 할당(Destructuring Assignment)이란?

배열 또는 객체의 구조를 분해하여, 그 값(분해된 속성)을 개별 변수에 담는 표현식을 의미합니다.

 

 

배열 구조 분해

초기화된 배열에서 값을 가져오려면 해당 값이 있는 인덱스에 접근해 가져와야 사용을 할수 있습니다.

const arr = [1, 2, 3, 4, 5];

const firstvalue = arr[0];
const secondvalue = arr[1];
const thirdvalue = arr[2];

console.log(firstvalue, secondvalue, thirdvalue); // 1 2 3

 

위의 방법을 간단하게 해결할수 있는 방법이 있습니다.

배열에서 변수명을 선언해준뒤 arr의 값을 차례대로 할당받으면 됩니다.

const arr = [1, 2, 3, 4, 5];
const [firstvalue,secondvalue,thirdvalue] = arr;
console.log(firstvalue, secondvalue, thirdvalue); // 1 2 3

 

만약 값 사이를 생략하고 싶다면 (2를 제외한 1과 3을 얻고 싶다면) , 로 중간값을 무시할수 있습니다.

const arr = [1, 2, 3, 4, 5];
const [firstvalue, ,thirdvalue] = arr;
console.log(firstvalue, thirdvalue); // 1 3

 

나머지 남은 요소들을 전부 받고싶다면 전개구문(...arg)를 사용하여 받아 올수가 있습니다.

const arr = [1, 2, 3, 4, 5];
const [firstvalue,secondvalue, ...thirdvalue] = arr;
console.log(firstvalue, secondvalue, thirdvalue); // 1 2 [ 3, 4, 5 ]

 

 

객체 구조 분해

객체 구조 분해도 배열과 마찬가지로 { } 객체임을 알려주는 중괄호를 써서 차례대로 할당받으면 됩니다.

배열과 다른점은 배열은 변수명을 자유롭게 지정할 수 있지만 객체는 분해하려는 프로퍼티의 Key를 사용해야 합니다.

해당하는 키가 없다면 값을 가져 오지 못하게 됩니다.

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

만약 키값이 아닌 다른 이름을 사용하고 싶다면 :을 붙여 사용할 변수 이름을 지정하면됩니다.

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

 

 

중첩된 객체의 구조 분해

객체 안에 객체가 들어가 있는 중첩객체에서 값을 가져 오기 위해선 해당하는 키를 계속 타고 들어가야 합니다.

var obj = {
	a: 1,
	b: {
		c: {
			d: 1
		},
		
	}
};
const num = obj.b.c.d;
console.log(num); // 1

이  부분을 구조분해할당으로 사용한다면 변수명(키)옆에 : 을 붙인다음 { }를 열어 중첩 관계를 표시하면 됩니다.

var obj = {
	a: 1,
	b: {
		c: {
			d: 1
		},
		
	}
};
const {b:{c:{d}}} = obj;
console.log(d); // 1

 

함수 인자 구조분해

함수 인자로 전달되는 배열 또는 객체에 대해서도 구조 분해 할당 표현식을 적용할 수가 있습니다.

const obj = {
	name : 'coriny',
	job : 'stratcoriny',
	hobby : ['game','singing']
};

function print(obj){
	console.log(`Hello, ${obj.name}`)
	console.log(`You are a ${obj.job}`)
	console.log(`your hobby is ${obj.hobby[0]} and ${obj.hobby[1]}`)
}
print(obj); 
/*
Hello, coriny
You are a stratcoriny
You are hobby game and singing
*/

이렇게 하면 일일이 넘겨 받은 객체에 점표기법(obj.name)을 사용하고 있습니다.

이러한 방법이 번거롭다면 객체에 각각 변수로 선언해서 값을 할당하고, 선언한 변수를 사용하면 됩니다.

인자를 작성하는 ()안에 객체 구조 분해 할당과 같이 { }로 사용할 변수명을 한뒤 변수명만 가져와서 사용할 수가 있습니다.

const obj = {
	name : 'coriny',
	job : 'stratcoriny',
	hobby : ['game','singing']
};

function print({name, job, hobby}){
	console.log(`Hello, ${name}`)
	console.log(`You are a ${job}`)
	console.log(`your hobby is ${hobby[0]} and ${hobby[1]}`)
}
print(obj); 
/*
Hello, coriny
You are a stratcoriny
You are hobby game and singing
*/

 

변수 값 교환

구조 분해 할당은 변수의 값을 교환 할때에도 사용될수 있습니다.

할당을 받는 변수와 구조 분해할 값을 서로 반대로 작성하면 됩니다.

let a = 'start';
let b = 'coriny';

[a,b] = [b, a];
console.log(a,b); // coriny start

 

 

 

 

 

배워나가는 코린이 입니다!!

부족한게 있다면 댓글로 지적해주세요!! 감사합니다!😊

'프로그래밍 기초 > JavaScript' 카테고리의 다른 글

TIL 7일차 + 배열이란?  (2) 2024.01.02
JavaScript에서의 this란?  (0) 2024.01.02
화살표 함수란?  (0) 2024.01.02
TIL 6일차 + JavaScript 기초  (2) 2023.12.29
자바 스크립트로 CRUD구현하기  (4) 2023.12.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
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
글 보관함