객체구조분해할당에 대해서는 어느 정도 알고 있다고 생각했고 배열을 구조분해할당 하는 것은 한 번도 하지않아서 이번 기회에 배열구조분해할당도 연습하며 알게 된 것을 적어보려고 한다.
우선 구조분해 할당이란 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식이다.
객체 구조 분해 할당 예시
const user = {
name : "홍길동", // 이름
tel : "010-1234-4321", // 전화번호
mail: "gildong@gmail.com", // 메일
}
우선 user라는 상수변수에는 object타입으로 이루어진 key가 3개인 이름,전화번호,메일로 이루어져있다.
객체안의 속성에 접근하기 위해서는 . dot을 통해 접근하여 해당하는 key가 가진 value값을 가져올 수 있다.
const named = user.name; // 홍길동
const telNumber = user.tel; // 010-1234-4321
const email = user.mail; // gildong@gmail.com
이렇게 각각의 변수에 객체가 가지고 있는 key값들을 할당할 수 있게되는데, 구조분해할당을 하면 필요한 속성의 값을 가져와 재사용 할 수 있다는 장점이 있다. 그리고 개인적인 생각으로는 코드의 가독성도 좋고 직관적인거 같다. 아래에는 객체구조분해 할당의 예시이다.
const {name,tel,mail} = user;
console.log(name,tel,mail); // 홍길동,010-1234-4321,gildong@gmail.com
// 구조분해할당한 변수의 이름을 바꾸고싶다?
const {name : named, tel: phone, mail : email} = user;
console.log(named,phone,email); // 홍길동,010-1234-4321,gildong@gmail.com
이렇게 구조분해할당한 변수의 이름도 변경할 수 있게 되는데 해당하는 key값 뒤에 : 을 붙여 바꿀 수 있다. 그리고 이 값을 재사용하기 위해서는
변경된 이름값을 사용해야 그 값을 가져올 수 있다!
배열 구조 분해 할당 예시
const fruits = ['사과','바나나','포도','오렌지'] // 과일들을 가지고 있는 변수 -> array
fruits라는 변수안에는 4개의 과일이 할당되어있는 배열형태인데, 각각의 값들을 변수에 담기위해서는 아래와 같이 해야할 것 이다.
const apple = fruits[0] // 사과
const banana = fruits[1] // 바나나
const grape = fruits[2] // 포도
const orange = fruits[3] // 오렌지
배열은 인덱스가 존재하기 때문에 현재 위에 예시대로 라고한다면, 총 4개의 인덱스가 있다. 인덱스는 0부터 시작하니 0~3까지 각각의 값들을 변수에 할당할 수 있게된다. 객체는 . 을 통해 접근할 수 있고 배열은 인덱스로 접근하여 값을 가지고 올 수 있다.
하지만 배열도 객체구조분해할당처럼 구조분해할당을 하고 이름을 바꿀 수 있을까?
const [apple,banana,grape,orange] = fruits
// 차례대로 배열의 인덱스 0 , 1, 2, 3
이렇게 배열을 구조분해할당 할 수 있는데 객체와 같이 이름을 바꾸려고 한다면 오류가 날 것이다. 그 이유는 배열은 객체와는 다르게 변수이름을 바꿀 수 없고 배열자체가 인덱스로 접근 할 수 있기때문에 구조분해할당 하려는 배열의 인덱스 값이 차례대로 들어간다고 생각하면 편하다.
결과적으로 이름을 바꿀순 있지만 객체처럼은 바꿀 수 없고 인덱스 위치에따라 값이 설정되기 때문에 처음부터 이름을 알아보기 쉽게 바꿀 수 있다.
const [fruit1, fruit2, fruit3, fruit4] = fruits
// fruit1 = 사과
// fruit2 = 바나나
// fruit3 = 포도
// fruit4 = 오렌지
인덱스의 값으로 설정되니 배열은 객체와다르게 처음부터 이름을 바꿔 설정 할 수 있다. 그렇게 만약 fruits 배열에는 현재 4개의 값을 가지고 있는데 추가로 fruit5 를 추가한다면 어떻게 될까?
답은 undefined 가 나올 것이다. 그 이유는 원본배열에는 4개의 값만 있을 뿐, index[4] 에 대한 값은 없기때문에 당연히 undefined 가 출력되는 것이다.
'리액트' 카테고리의 다른 글
slice() vs splice() (0) | 2024.12.16 |
---|---|
useState 이해하기 (1) | 2024.12.16 |
Reduce Method (1) | 2024.12.13 |
Boolean (0) | 2024.12.13 |
파라미터 함수전달과 함수호출의 차이 (0) | 2024.12.11 |