JavaScript

자바스크립트 비구조화 할당

이수광 2023. 12. 11. 22:17

배열의 비구조화 할당

let arr = ["one", "two", "three"];

let one = arr[0];
let two = arr[1];
let three = arr[2];

console.log(one, two, three);

변수 세 개의 각각 값을 할당하려 하니까 arr 이라는 변수를 계속 사용해야하는 반복코드가 존재한다.

이 코드를 더 줄여주는 비 구조화 할당이란 것을 사용해 한 줄로 줄여보자.

let arr = ["one", "two", "three"];

let [one, two, three] = arr;

대괄호를 이용하여 배열의 값을 순서대로 할당받아 사용할 수 있는 방법을 배열의 비 구조화 할당이라고 표현한다.

더 디테일하게는 배열의 기본변수 비 구조화 할당이라고도 한다.

let [one, two, three] = ["one", "two", "three"];

console.log(one, two, three);

 또 다르게는 오른쪽에 있는 배열에서 인덱스를 꺼내어 쓸 수도 있다.

이것을 배열의 선언분리 비 구조화 할당이라고 부른다.

( 이름을 외우기 보다는 배열의 비 구조화 할당의 여러가지 방법이 있음을 인지 )

let [one, two, three, four] = ["one", "two", "three"];

console.log(one, two, three, four);

// one two three undefined

요소가 없는 네번째 변수까지 할당받고 싶어한다면 ? 마지막 four는 할당받지 못해 undefined 를 가지게 된다.

하지만 변수에 undefined 라는 값이 할당되면 안돼는 상황이 발생할 수 있다. 이럴 때는 기본값을 설정할 수 있다.

기본값을 설정하면 할당받지 못하는 상황에 변수의 기본값을 지정해줄 수 있다.

let [one, two, three, four = "four"] = ["one", "two", "three"];

console.log(one, two, three, four);

// one two three four 로 나오게 된다.

이 배열의 비 구조화 할당을 이용하면 두 개 변수의 값을 서로 바꾸는 스왑 이라는 것에도 활용이 가능하다.

스왑이란 ?

let a = 10;

let b = 20;

let tmp = 0;

tmp = a;
a = b;
b = tmp;
console.log(a, b);

값을 스왑하는데 세줄이나 필요하고 임시변수까지 선언해야한다.

이것을 비 구조화 할당을 이용해 해결해보자.

let a = 10;
let b = 20;

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

오른쪽에 배열을 하나를 만들어 b와 a를 가지게한다. 이 배열을 비 구조화 할당으로

a와 b에 0번 인덱스, 1번 인덱스에 할당한 것이다.

이런식으로 배열의 비 구조화 할당은 여러가지 테크닉적으로 이용가능하다.

객체의 비구조화 할당

let object = { one: "one", two: "two", three: "three" };

let one = object.one;
let two = object.two;
let three = object.three;

console.log(one, two, three);

배열과 같이 변수를 계속 작성하게 된다.

let object = { one: "one", two: "two", three: "three" };

let { one, two, three } = object;

console.log(one, two, three);

오브젝트에 key 값을 기준으로 one이란 key를 값는 값을 one의 변수에 저장하는 방식으로 쉽게 할당할 수 있다.

객체의 비 구조화 할당은 배열과 다르게 인덱스(순서)가 아니라 key값을 기준으로 할당한다.

let object = { one: "one", two: "two", three: "three", name: "이수광" };

let { name, one, two, three } = object;

console.log(one, two, three, name);

이 객체의 프로퍼티의 키값을 통해서 접근해야 해서 변수명이 키값으로 강제되는 부분이 있지만 극복할 수 있는 방법이 있다.

name 이라는 프로퍼티의 value를 key값으로 접근해서 비 구조화 할당을 하지만 다른 변수의 이름을 사용하게 할 수 있다.

let object = { one: "one", two: "two", three: "three", name: "이수광" };

let { name: myName, one, two, three } = object;

console.log(one, two, three, myName);

변수의 이름을 바꿔서 할당 받을 수도 있다.

name 이란 키값을 기준으로 value를 myName 이란 변수에 해당하겠다. 라고 표현한 것으로 이해하자.

또 한 마찬가지로 배열처럼 기본값을 설정할 수 있다. abc 라는 존재하지 않는 프로퍼티의 값을 할당받고자 하면 undefined 가 뜬다.

이때도 = 연산자를 이용해 기본값을 할당 받도록 만들 수 있다.

let object = { one: "one", two: "two", three: "three", name: "이수광" };

let { name: myName, one, two, three, abc = "four" } = object;

console.log(one, two, three, myName, abc);