전개 연산자 (Spread Operator)
전개 연자는 배열이나 객체의 요소들을 개별 항목으로 분리할 때 사용됩니다. 배열이나 객체를 펼쳐서 값을 복사하거나 결합하는 등의 작업을 간단하게 할 수 있습니다.
1. 배열의 요소 펼치기
배열에서 Math.max()처럼 인수로 배열을 직접 전달하면 제대로 동작하지 않지만, 전개 연자를 사용하면 배열 요소를 펼쳐서 전달할 수 있습니다.
//이하는 전개 연자로 배열요소를 전달하는 방법입니다.
const numbers = [20, 2, 9, 22];
console.log(Math.max(...numbers)); // 22
//이하는 전개 연자 없이 apply로 배열 요소를 전달하는 방법입니다.
const numbers = [20, 2, 9, 22];
// apply() 메서드로 배열을 개별 인수로 전달
console.log(Math.max.apply(null, numbers)); // 22
// 이하는 반복문을 통해 배열 요소를 전달하는 방법입니다.
const numbers = [20, 2, 9, 22];
let max = -Infinity; // 가장 작은 값으로 초기화
// 배열 요소를 하나씩 비교하면서 최대값 구하기
for (let i = 0; i < numbers.length; i++) {
if (numbers[i] > max) {
max = numbers[i];
}
}
console.log(max); // 22
2. 배열 복사
배열을 복사할 때, 단순히 배열을 할당하면 주소를 공유하게 됩니다. 하지만 전개 연자를 사용하면 배열의 요소를 복사하여 새로운 배열을 생성할 수 있습니다.
let arr1 = [1, 2, 3];
let arr2 = [...arr1]; // 배열 복사
arr1[0] = 10;
console.log(arr1, arr2); // [10, 2, 3] [1, 2, 3]
3. 객체 복사
객체도 배열과 마찬가지로 전개 연자를 사용해 복사할 수 있습니다. 객체를 복사하면, 객체의 속성값을 새로운 객체로 복사하여 독립적으로 작업할 수 있습니다.
let obj1 = { name: "홍길동", age: 23 };
let obj2 = { ...obj1 }; // 객체 복사
obj1.name = "고길동";
console.log(obj1, obj2); // { name: '고길동', age: 23 } { name: '홍길동', age: 23 }
4. 배열 및 객체 결합
배열이나 객체를 결합할 때도 전개 연자를 사용하면 간편하게 처리할 수 있습니다.
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const combinedArr = [...arr1, ...arr2];
console.log(combinedArr); // [1, 2, 3, 4, 5, 6] //만약 전개하지 않으면 [[1, 2, 3], [4, 5, 6]]이 된다.
const obj1 = { name: '홍길동', age: 23 };
const obj2 = { hobby: '축구' };
const combinedObj = { ...obj1, ...obj2 };
console.log(combinedObj); // { name: '홍길동', age: 23, hobby: '축구' }
비구조화 (Destructuring)
비구조화는 배열이나 객체의 값을 쉽게 변수로 분할할 수 있는 문법입니다. 배열과 객체에서 필요한 값만 추출해 변수에 할당하는 데 유용합니다.
1. 배열 비구조화
배열 비구조화는 배열의 각 요소를 변수로 나누어 할당할 수 있게 해줍니다.
const arr = [1, 2, 3];
let [a, b, c] = arr;
console.log(a, b, c); // 1 2 3 // 기존 배열이었던게 각 a, b, c에 들어갔음을 볼 수 있습니다.
2. 배열의 일부 값 추출
배열에서 일부 값만 추출하려면 쉼표(,)를 사용하여 필요한 값만 선택할 수 있습니다.
const arr = [1, 2, 3];
let [a, , c] = arr;
console.log(a, c); // 1 3
3. 배열 크기보다 변수 수가 많을 때
배열의 크기보다 많은 변수 수를 지정하면, 나머지 변수는 undefined로 설정됩니다.
const arr = [1, 2];
let [a, b, c] = arr;
console.log(a, b, c); // 1 2 undefined
4. 기본값 설정
배열 비구조화 시 기본값을 설정할 수 있습니다. 배열의 값이 없으면 기본값이 사용됩니다.
const arr = [1];
let [a, b = 20] = arr;
console.log(a, b); // 1 20
5. 객체 비구조화
객체 비구조화는 객체의 속성명을 기반으로 값을 변수에 할당합니다. 이때 속성명이 중요합니다.
const obj = { name: "홍길동", age: 23 };
let { name, age } = obj;
console.log(name, age); // 홍길동 23
6. 객체 속성명 변경 (별칭)
비구조화 시 객체의 속성명을 다른 이름으로 변경할 수 있습니다.
const obj = { name: "홍길동", age: 23 };
let { name: newName, age: newAge } = obj;
console.log(newName, newAge); // 홍길동 23
7. 기본값 설정
객체에서 존재하지 않는 속성을 변수로 받을 때 기본값을 설정할 수 있습니다.
const obj = { name: "홍길동" };
let { name, age = 30 } = obj;
console.log(name, age); // 홍길동 30
8. 객체의 나머지 속성 처리
객체에서 특정 속성만 추출하고 나머지 속성들은 rest 객체로 처리할 수 있습니다.
const obj = { name: "홍길동", age: 23, hobby: "축구" };
let { name, ...rest } = obj;
console.log(name); // 홍길동
console.log(rest); // { age: 23, hobby: '축구' }
비구조화와 함수 매개변수 사용
비구조화는 함수의 매개변수에서도 유용하게 사용됩니다. 매개변수로 전달된 객체를 비구조화해서 바로 사용할 수 있습니다.
function print1(obj) {
console.log("#1", `${obj.name} ${obj.age} ${obj.email}`);
}
// 매개변수로 전달된 객체를 지역변수로 비구조화해서 사용
function print2(obj) {
const { name, age, email } = obj;
console.log("#2", `${name} ${age} ${email}`);
}
// 비구조화해서 매개변수의 값으로 받는 형식
function print3({ name, age, email }) {
console.log("#3", `${name} ${age} ${email}`);
}
const person = {
name: "홍길동",
age: 23,
email: "hong@test.com"
};
print1(person);
print2(person);
print3(person);
// #1 홍길동 23 hong@test.com
// #2 홍길동 23 hong@test.com
// #3 홍길동 23 hong@test.com
*생성형 AI 활용한 클라우드&보안 전문가 양성캠프 과정의 교육내용 정리 자료입니다.
'코딩 > 자바스크립트' 카테고리의 다른 글
[새싹 성동 2기] 국가별 국기 정보를 가져와 웹 페이지에 출력하기 (Axios와 jQuery 활용) (3) | 2024.11.15 |
---|---|
[새싹 성동 2기] JavaScript의 배열 메서드: map(), filter(), reduce() (2) | 2024.11.15 |
[새싹 성동 2기] JavaScript에서 JSON 데이터 처리 및 객체 속성명 활용 (4) | 2024.11.15 |
[새싹 성동 2기] 자바스크립트를 이용한 간단한 코딩 실습 (0) | 2024.11.12 |
[새싹 성동 2기] 자바스크립트에서 함수 정의와 활용법 (2) | 2024.11.12 |