ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JavaScript의 구조 분해 할당(Destructuring Assignment)
    프론트 공부 2023. 4. 25. 11:54

    구조 분해 할당

    구조화된 배열과 같은 이터러블 또는 객체를 비구조화 하여 1개 이상의 변수를 개별적으로 할당하는것.

    배열과 같은 이터러블 또는 객체 리터럴에서 필요한 값만 추출하여 변수에 할당할 때 유용하다.

     

    • 구조 분해 할당 대상은 이터러블(할당문의 우변)이어야 하며, 할당 기준은 배열의 인덱스 이다.
    let [a, b] = [10, 20];
    console.log(a); // 10
    console.log(b); // 20
    
    let arr =[1,2,3]
    let [a,b,c] =arr
    console.log(a); // 10
    console.log(b); // 20

    배열 구조 분해 할당은 REST 엘리먼트 사용이 가능하다.

    let array = [1, 2, 3, 4, 5];
    let [a, b, ...rest] = array;
    console.log(rest); // [3, 4, 5];
    • 구조 분해 할당에서는 a, b 까지 1과 2가 대입이 되고, 나머지 3, 4, 5는 ...rest 로 받아서 [3, 4, 5] 와 같이 rest 변수에 배열로 저장한다
    •  배열 구조분해 할당(array destructuring assignment)에서 위와 같이 쓰이는 ... 요소를 Rest elements 라고 부른다.

    변수의 개수와 이터러블의 요소 개수가 반드시 일치할 필요는 없다.

    const [a,b] = [1,2]
    console.log(a,b) // 1 2
    
    const [c,d] = [1]
    console.log(c,d) // 1 undefined
    
    const [e,f] = [1,2,3]
    console.log(e,f) // 1 2

    배열 디스트럭처링 할당을 위한 변수에 기본값을 설정할 수 있다.

    const [a,b,c = 3] =[1, 2]
    console.log(a,b,c) // 1 2 3
    
    const [d,e = 10,f = 3] =[1, 2]
    console.log(a,b,c) // 1 2 3
    // 기본값보다 할당된 값이 우선시 된다.

     

    객체(object)에서의 구조 분해 할당

    const obj = {
      name: "Bob",
      age: 20,
      memo: "Hello",
    };
    const { name, age, memo } = obj;
    console.log(name); // "Bob"
    console.log(age); // 20
    console.log(memo); // "Hello"
    
    // 만약 구조 분해 할당을 사용하지 않는다면?
    // 아래와 같이 직접 대입해 주어야 한다.
    const name = obj.name;
    const age = obj.age;
    const memo = obj.memo;

    객체의 프로퍼티명과 다른 변수명으로 새롭게 지정가능하다.

    const obj = {
      name: "Bob",
      age: 20,
      memo: "Hello",
    };
    const { name: YourName, age, memo } = obj;
    console.log(YourName); // 'Bob'

    객체의 구조 분해 할당은 프로퍼티 키를 기준으로 이루어진다.

    onst obj = {
      name: "Bob",
      age: 20,
      memo: "Hello",
    };
    const { name, age, memo } = obj;
    console.log(name, age, memo); // Bob 18 Hello
    
    const { age, name, memo } = obj;
    console.log(name, age, memo); // Bob 18 Hello
    // 순서는 의미가 없다!!!

    객체 구조 분해 할당은 REST 프로퍼티 사용이 가능하다.

    const obj = {
      name: "Bob",
      age: 20,
      memo: "Hello",
    };
    const { name, ...rest } = obj;
    console.log(name); // "Bob"
    console.log(rest); // { age : 20, memo: 'Hello' }
    • obj 객체 중 name에 프로퍼티 값이 저장되고, 나머지 age와 memo는 ...rest가 받아서 rest 변수에 모아 객체로 저장한다.
    • 객체의 구조 분해 할당에서 위의 역할로 ...이 쓰이는 것을 가리켜 Rest properties 라고 부른다.
    • REST 프로퍼티는 스프레드 프로퍼티와 함께 2021 1월 현재 TC39 프로세스의 stage 4(Finished) 단계에 제안되어 있다.

    객체 구조 분해 할당은 중첩이 가능하다.

    const obj = {
      name: "Bob",
      age: 20,
      memo: "Hello",
      adress:{
      city: "seoul"
      }
    };
    const {adress:{city}} = obj;
    console.log(city); // seoul
    • adress 프로퍼티 키로 객체를 추출하고 city 프로퍼티 키로 값을 추출한다.

    객체 구조 분해 할당은 객체를 인수로 전달받은 함수의 매개변수로 사용이 가능하다.

    function printTodo({content, completed}){
    	console.log(`할일 ${content}은 ${completed ? '완료' : '비완료'} 하였습니다.`)
    }
     printTodo({id:1, content:'방청소', completed:'완료'})

     

    '프론트 공부' 카테고리의 다른 글

    TypeScript 기초  (0) 2023.05.30
    자바스크립트 딥다이브 DOM  (0) 2023.05.09
    고차함수 정리  (0) 2023.04.17
    클로져  (0) 2023.04.12
    Section2 기술면접 준비  (0) 2023.04.10
Designed by Tistory.