TIL [비구조화 할당]
객체 비구조화 할당
일반적으로 함수에 객체를 파라미터로 받아와서 사용할 경우
const user = {
name: 'Peter',
age: 22,
city: 'Seoul'
}
function showUserInfo(user){
const info = `유저 이름: ${user.name}, 나이: ${user.age},
사는 곳: ${user.city}`;
console.log(info);
}
showUserInfo(user); // 유저 이름: Peter, 나이: 22, 사는 곳: Seoul
showUserInfo함수는 파라미터인 user 객체에 있는 정보를 조회할 때 마다 user. 이라는 객체의 키 값을 이용하여 정보를 조회하는 것을 볼 수 있다. 하지만 이를 더 짧고 간편하게 쓰기 위해선 비구조화 할당을 이용하면 된다.
1. 객체를 파라미터로 받은 후 함수 내에서 비구조화 할당을 한 경우
const user = {
name: 'Peter',
age: 22,
city: 'Seoul'
}
function showUserInfo(user){
const {name, age, city} = user;
// const name = user.name
// const age = user.age
// const city = user.city
const info = `유저 이름: ${name}, 나이: ${age},
사는 곳: ${city}`;
console.log(info);
}
showUserInfo(user);
비구조화 할당 문법은 const {변수(객체의 key와 같은)} = 객체; 라고 하면 끝이다. 그러면 알아서 변수들이 객체안의 key값을 가르키게 된다.
2. 함수의 파라미터 단계에서 비구조화 할당을 한 경우
1번의 예시보다 더 간편한 예시가 있다. 바로 함수의 파라미터 부분에서 비구조화 할당을 하는 것이다.
const user = {
name: 'Peter',
age: 22,
city: 'Seoul'
}
function showUserInfo({name, age, city}){
const info = `유저 이름: ${name}, 나이: ${age},
사는 곳: ${city}`;
console.log(info);
}
showUserInfo(user);
전의 예시들 보다 훨씬 더 간결해 진 모습을 확인할 수 있다.
3. 예외적인 경우 - 파라미터 단계에서 비구조화 할당 시 값이 없는 경우
const user = {
name: 'Peter',
age: 22,
city: 'Seoul'
}
function showUserInfo({name, age, city, hobby}){
const info = `유저 이름: ${name}, 나이: ${age},
사는 곳: ${city}, 취미: ${hobby}`;
console.log(info);
}
showUserInfo(user); // 유저 이름: Peter, 나이: 22, 사는 곳:
// Seoul, 취미: undefined
user안에 key는 name, age, city가 다 인데 함수의 파라미터는 hobby가 포함되어 있어서 undefined를 반환한 것을 볼 수 있다. 이럴 경우에는 기본 값을 함수의 파라미터 단계에서 넣어주면 된다.
const user = {
name: 'Peter',
age: 22,
city: 'Seoul'
}
function showUserInfo({name, age, city, hobby = 'game'}){
const info = `유저 이름: ${name}, 나이: ${age},
사는 곳: ${city}, 취미: ${hobby}`;
console.log(info);
}
showUserInfo(user); // 유저 이름: Peter, 나이: 22, 사는 곳:
// Seoul, 취미: game
4. rest/spread 문법을 이용한 객체 분해
const person = {
name: '김코딩',
age: 23,
level: 'Junior',
}
const {name, ...args} = person;
console.log(name); // '김코딩'
console.log({...args}); // { age: 23, level: 'Junior }
const person = {
name: '조이서',
major: '생물학과',
lesson: '생물',
grade: 'A'
}
const { name, lesson: course, grade} = person;
console.log(name); // 조이서
console.log(lesson); // 생물
console.log(course); // 생물
// const lesson = person.lesson = course = '생물'
console.log(grade); // A
5. spread 문법을 이용한 객체의 복사
const user = {
name: '김코딩',
company: {
name: 'Code States',
department: 'Development',
role: {
name: 'Software Engineer'
}
},
age: 35
}
const overwriteChanges = {
name: '박해커',
age: 20,
...user
}
console.log(overwriteChanges);
// user = {
// name: '김코딩',
// company: {
// name: 'Code States',
// department: 'Development',
// role: {
// name: 'Software Engineer'
// }
// },
// age: 35
// }
처음에 overwriteChanges 객체안에 name과 age가 있었지만 객체 user를 복사하면서 값이 덮어 씌워졌다. 따라서 name과 age값도 바뀐 것을 확인할 수 있다.
배열 비구조화 할당
배열도 객체와 마찬가지로 비구조화 할당을 할 수 있다. 이 문법은 배열 안에 있는 원소를 다른 이름 (변수)로 새로 선언해주고 싶을 때 사용하면 된다.
1. 배열의 요소를 변수에 할당하는 경우
const array = [1, 2];
const [one, two] = array;
// const [one, two] = [1, 2]
// const one = array[0]
// const two = array[1]
console.log(one); // 1
console.log(two); // 2
기본 값이 주어진 경우
var a, b;
[a = 5, b = 7] = [1];
console.log(a); // 1
console.log(b); // 7
2. 함수의 파라미터 단계에서 비구조화 할당을 한 경우
const arr = [1, 2];
function addValue([a, b]){
return a + b;
}
addValue(arr); // 3
3. rest/spread 문법을 이용한 배열 분해
const array = ['code', 'states', 'im', 'course'];
const [start, ...rest] = array;
console.log(start) // code
console.log(rest) // ['states', 'im', 'course']
rest 파라미터를 쓰면 배열이 나온다는 사실을 잊어버리면 안된다.
4. 변수 값 교환하기
let a = 1;
let b = 3;
[a, b] = [b, a];
console.log(a); // 3
console.log(b); // 1
const로 변수를 선언할 경우 값이 바뀌기 때문에 사용할 수 없다. 변수 값을 교환하려면 let이나 var를 이용해야 한다.
자료 출처:
Author And Source
이 문제에 관하여(TIL [비구조화 할당]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dlrbwls0302/TIL-비구조화-할당저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)