배열 구조 분해 할당

배열 구조 분해 할당에 대한 설명이다.
윤여찬's avatar
Nov 09, 2023
배열 구조 분해 할당
배열 구조 분해 할당을 진짜 제대로 한번 써보자. 블로그를 찾아보니
전부다 무시하는 부분은 포스팅이 안되어있다.
 
제대로 포스팅하여 보시는 분들에게 제대로 설명해보고 저도 제대로 이해해보려합니다.
모든 설명은 MDN을 기반으로 작성하였습니다.
 

배열 구조 분해

기본 변수 할당
var foo = ["one", "two", "three"]; var [red, yellow, green] = foo; console.log(red); // "one" console.log(yellow); // "two" console.log(green); // "three"
자 이 부분을 잘 확인해보자.
foo라는 변수에 지금 [] 배열이 들어가있다. string으로 되어 있는 "one", "two", "three" 가 포함되어있다. 자 이제 구조 분해 할당이 시작된다.
var [red, yellow, green] = foo; 자 여기를 보면 red, yellow, green 으로 구조분해할당이 되어있다. 이게 바로 구조 분해 할당인데 이때 다 콘솔로 찍어보면 각각의 값들이 들어가 있는 것을 확인할 수 있다.
간단하게 기본 적인 구조 분해 할당을 보았다면 아래로 특색있게 풀어보자.
선언에 분리한 할당
var a, b; [a, b] = [1, 2]; console.log(a); // 1 console.log(b); // 2
 
변수의 선언이 분리 되면 어떨까? 자 위에 var로 선언 된 a와 b가 존재한다.
[a, b]로 선언 되어 있는 곳에 1, 2를 넣어준다. 그런 후에 log로 찍었을 때 a에는 1이 b에는 2가 들어가있는 것을 확인할 수 있다.
 
기본 값
var a, b; [a = 5, b = 7] = [1]; console.log(a); // 1 console.log(b); // 7
자 여기서 보면 변수에 할당을 진행해주는 부분을 확인할 수 있다. mdn에서 보면 만약에 할당을 안해주면 undefined로 대신한다라고 하여 아래 실험해보았다.
 
위와 같은 조건에서 b에대한 기본 값 선언을 하지 않았을 때 콘솔로그를 확인할 수 있다.
notion image
변수 값 교환하기
자 위에 기본 값도 변경하면 당연 변수 값도 변환이 가능할 것이다.
var a = 1; var b = 3; [a, b] = [b, a]; console.log(a); // 3 console.log(b); // 1
a와 b에 값이 변경 된 것을 확인 할 수 있다.
함수가 반환한 배열 분석
function f() { return [1, 2]; } var a, b; [a, b] = f(); console.log(a); // 1 console.log(b); // 2
자 함수 f()를 생성하였다.
그 후 함수를 호출과 동시에 [a, b]로 구조 분해 할당을 진행하였다.
자 위에 1, 2 를 기본값으로 지정했기에 콘솔에 문제없이 a와 b의 값이 찍힌 것을 확인할 수 있다.
 
일부 반환 값을 무시하기
다른 블로그에는 전혀 설명되진 않았지만 MDN에는 설명이 되어있는 부분이다.
 
아래와 같이 반환 값을 무시할 수 있다.
function f() { return [1, 2, 3]; } var [a, , b] = f(); console.log(a); // 1 console.log(b); // 3
자 여기서 주목해야하는 부분은 var [a, , b] = f(); 이 부분이다.
가장 중요하다고 생각하는데 [a, ,b] 이부분에 가운데 아무것도 없이 넘어간 b를 볼 수 있다.
자 출력을 보면 a는 1로 b는 3이다 그럼?
 
a, b인덱스는? 이라고 하면? → 정답은 a는 0 b는 1의 인덱스다.
 
배열은 인덱스를 기준으로 구조분해할당하고있다.
[, ,] = f();
이와 같이 모두 무시할 수 도있다.
 
예시로 내가 배움을 받았던 회사의 코드를 보자.
const [ modelType = '', shipNo = '', itemType = '', glue2ReportNo, , , , , , , panelCnt, ] = qrText.split('/');
자 파라미터로 받은 qrText를 지금 split로 / 기준으로 배열에 담고있다.
// qrText: MARK3/HN3275/FPA1-82/2/3043/1003/370.4/2724/684/88/4 // qrText: ['MARK3','HN3275','FPA1-82','2','3043','1003','370.4','2724','684','88','4']
이런 형식으로 쪼개지는 것을 확인할 수 있다.
근데? 질문해보자 항상 qrText가 제대로 들어온다는 것을 가정할 수 있는가?
정답은 아니다. 그렇기에 초기값을 ‘’ 빈 문자열로 놔둬 안전하게 만들어 놓았다.
 
이렇게 배열 구조 분해 할당을 알아보고 복기해보았다.
Share article

찬찬잉