김민쏭
REPOSITORY
김민쏭
전체 방문자
오늘
어제
  • 분류 전체보기 (69)
    • 원앙둥지 (17)
      • 2022 홋카이도 (6)
      • 2024 후쿠오카 (3)
    • 프로그래밍 (51)
      • 정리노트 (11)
      • Spring (5)
      • Javascript (7)
      • Database (7)
      • 알고리즘 (11)
      • 좋은글_갈무리 (3)
      • 기타 (3)

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
김민쏭

REPOSITORY

구조분해 할당(비구조화 할당) (Destructuring assignment)
프로그래밍/Javascript

구조분해 할당(비구조화 할당) (Destructuring assignment)

2020. 6. 29. 10:35

 

ES6에서 도입된 문법 중 구조분해 할당(비구조화 할당, 구조 분해)를 이용하면

여러모로 간결하게 코드를 작성할 수 있다.

 

배열

 

const arr = ['가', '나', '다', '라'];

const ga = arr[0];
const na = arr[1];
const da = arr[2];
const ra = arr[3];

 

우리가 배열을 하나 선언하고, 해당 값들을 하나하나 꺼내어

변수로 선언하고, 사용해야한다면 이런 식으로 사용해야한다.

 

ga, na, da, ra를 콘솔에 찍어보면 아래와 같은 결과가 출력될 것이다.

가
나
다
라

 

우리는 위와 같은 코드를 구조분해 할당 문법을 통해서

조금 더 간단하고 간결하게 개별 변수로 선언이 가능하다.

 

const [ ga, na, da, ra ] = ['가', '나', '다', '라'];

 

앞에 [ ga, na, da, ra ] 하고 선언된건 변수의 이름이다.

위에서 선언한 arr를 다시 활용하고 싶다면 당연하게도

 

const [ ga, na, da, ra ] = arr

 

위와 같이 코드를 작성하여도 결과물은 같다.

ga, na, da, ra를 콘솔로 찍어보면 아래와 같은 결과물이 나온다.

 

가
나
다
라

 

 

객체

 

배열뿐만 아니라 객체에도 사용이 가능하다. 

 

const form = {
    name: '난 이름',
    description: '난 설명',
    one: '하나요',
    two: '둘이요'
}

 

이런 임의의 객체가 있다고 생각해보자.

 

우리는 아마 form 객체의 각 값들을 개별 변수로 선언하기 위해 아래와 같은 코드를 작성한 경험이 있다.

 

const formName = form.name;
const formDesc = form.description;
const formOne = form.one;
const formTwo = form.two;

 

배열과 마찬가지로 객체 또한 구조분해 할당을 통해 더 간결하게 개별 변수로 선언이 가능하다.

 

const { name, desctiprion, one, two } = form;

 

이런 식으로 작성하면, 변수의 이름과 동일한 key의 값이 담겨 선언된다.

 

console.log(name); // 난 이름
console.log(desctiprion); // 난 설명

 

그런데 우리가 만약 변수의 이름을 key의 이름과 다르게 하고 싶다면 어떻게 해야할까?

 

// form.name 을 rename 이라는 값에 담고 싶다면
const { name: rename, desctiprion, one, two } = form;

 

이렇게 작성해주면 객체 내 name의 값이 rename이라는 이름의 변수로 선언된다.

 

 

------

 

구조분해 할당을 보다보니까, 어디에서 많이 익숙한 모습이다... 싶었는데

리액트에서 useState를 쓸 때 사용방식이 바로 이 구조분해 할당을 이용한 것이었다.

 

const [ form, setForm ] = useState({ name:'', desc: '' });

 

이렇게 그냥 관성처럼 쓰고 있었는데, 구조분해 할당을 알고나서 띠용해서 공식문서를 찾아보았다.

 


useState는 무엇을 반환할까요?

state 변수, 해당 변수를 갱신할 수 있는 함수 이 두 가지 쌍을 반환합니다.

이것이 바로 const [count, setCount] = useState()라고 쓰는 이유입니다.


 

그렇다. 이미 써있었던 것이다.

근데 비구조화 할당을 몰라서 저게 대체 뭔소린가~ 하고 넘어갔던 것인데...

그랬구나~ 이제야 알겠다~

저작자표시 (새창열림)

'프로그래밍 > Javascript' 카테고리의 다른 글

React Native에 Apollo Client, GraphQL 부착하기  (0) 2022.07.23
노션 페이지를 React로 웹에 띄워보자 (react-notion)  (5) 2020.11.21
React에서 화면을 만드는 흐름 (index.js, index.html, app.js)  (0) 2020.06.03
VS Code로 React + SpringBoot 개발환경 세팅 (2/2)  (0) 2020.06.02
VS Code로 React + SpringBoot 개발환경 세팅 (1/2)  (1) 2020.06.02
    '프로그래밍/Javascript' 카테고리의 다른 글
    • React Native에 Apollo Client, GraphQL 부착하기
    • 노션 페이지를 React로 웹에 띄워보자 (react-notion)
    • React에서 화면을 만드는 흐름 (index.js, index.html, app.js)
    • VS Code로 React + SpringBoot 개발환경 세팅 (2/2)
    김민쏭
    김민쏭
    예예,,,저장소임더,,,

    티스토리툴바