JavaScript Spread Operator

자바스크립트의 스프레드 연산자 (...)는 배열, 객체, 함수 호출 등의 여러 상황에서 값을 확장하거나 펼치는 데 사용되는 유용한 문법입니다. 스프레드 연산자는 ES6(ECMAScript 2015)에서 도입되었습니다.

배열에서의 스프레드 연산자

스프레드 연산자는 배열의 요소를 개별 요소로 분리하여 사용할 수 있습니다.

배열 복사

기존 배열을 쉽게 복사할 수 있습니다.

const originalArray = [1, 2, 3];
const copiedArray = [...originalArray];

console.log(copiedArray); // [1, 2, 3]

배열 결합

여러 배열을 하나의 배열로 결합할 수 있습니다.

const array1 = [1, 2, 3];
const array2 = [4, 5, 6];
const combinedArray = [...array1, ...array2];

console.log(combinedArray); // [1, 2, 3, 4, 5, 6]

배열에서의 스프레드 연산자 활용 예제

const numbers = [1, 2, 3, 4, 5];
const maxNumber = Math.max(...numbers);

console.log(maxNumber); // 5

객체에서의 스프레드 연산자

객체에서도 스프레드 연산자를 사용하여 객체의 속성을 확장하거나 복사할 수 있습니다. 이 기능은 ES2018(ES9)에서 도입되었습니다.

객체 복사

기존 객체를 쉽게 복사할 수 있습니다.

const originalObject = { a: 1, b: 2 };
const copiedObject = { ...originalObject };

console.log(copiedObject); // { a: 1, b: 2 }

객체 결합

여러 객체를 하나의 객체로 결합할 수 있습니다.

const object1 = { a: 1, b: 2 };
const object2 = { c: 3, d: 4 };
const combinedObject = { ...object1, ...object2 };

console.log(combinedObject); // { a: 1, b: 2, c: 3, d: 4 }

객체에서의 스프레드 연산자 활용 예제

const defaultSettings = {
    volume: 50,
    brightness: 70,
};
const userSettings = {
    volume: 80,
};
const settings = { ...defaultSettings, ...userSettings };

console.log(settings); // { volume: 80, brightness: 70 }

함수 호출에서의 스프레드 연산자

스프레드 연산자를 사용하여 배열을 함수의 인수로 쉽게 전달할 수 있습니다.

배열을 인수로 전달

const numbers = [1, 2, 3, 4, 5];

function sum(a, b, c, d, e) {
    return a + b + c + d + e;
}

const result = sum(...numbers);

console.log(result); // 15

스프레드 연산자와 나머지 매개변수의 차이

스프레드 연산자는 배열을 개별 요소로 분리하는 반면, 나머지 매개변수는 여러 개의 인수를 배열로 모읍니다.

나머지 매개변수 예제

function sum(...args) {
    return args.reduce((acc, curr) => acc + curr, 0);
}

const result = sum(1, 2, 3, 4, 5);

console.log(result); // 15

결론

스프레드 연산자는 배열과 객체의 요소를 쉽게 확장하고 결합하는 강력한 도구입니다. 배열의 복사와 결합, 객체의 복사와 결합, 함수 호출 시 인수 확장 등 다양한 상황에서 유용하게 사용할 수 있습니다. 스프레드 연산자를 사용하면 코드의 가독성과 유지보수성이 향상됩니다.

Leave a Reply

Your email address will not be published. Required fields are marked *