개발/자바스크립트

JavaScript : Rest(...) 와 Spread(...) 연산자 문법

피터JK 2025. 2. 23. 16:36
728x90

rest(...)와 spread(...) 연산자는 JavaScript에서 ... 문법을 사용하지만, 각각 다른 역할을 합니다.

1. rest(...) 연산자

**"나머지 연산자"**라고도 하며, 함수의 인자 또는 배열/객체의 나머지 요소를 하나의 변수로 모을 때 사용합니다.

function sum(...numbers) { // rest 연산자
  return numbers.reduce((acc, num) => acc + num, 0);
}

console.log(sum(1, 2, 3, 4)); // 10
  • sum 함수는 여러 개의 인자를 받을 수 있으며, ...numbers가 모든 인자를 배열로 모읍니다.
  • rest 연산자는 항상 마지막에 위치해야 합니다.

객체에서의 rest

객체에서 특정 속성을 제외하고 나머지 값을 모을 때 사용됩니다.

const user = { name: "Peter", age: 30, job: "Developer" };
const { name, ...rest } = user;

console.log(name); // "Peter"
console.log(rest); // { age: 30, job: "Developer" }
  • name을 분해하고, 나머지 속성을 rest에 담았습니다.

728x90

 

2. spread(...) 연산자

**"전개 연산자"**라고도 하며, 배열이나 객체의 요소를 펼칠 때 사용합니다.

const numbers = [1, 2, 3];
console.log(Math.max(...numbers)); // 3
  • Math.max(...numbers)는 Math.max(1, 2, 3)처럼 값을 펼쳐서 전달합니다.

배열에서의 spread

const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const merged = [...arr1, ...arr2];

console.log(merged); // [1, 2, 3, 4, 5, 6]
  • spread를 사용해 두 배열을 쉽게 합칠 수 있습니다.

객체에서의 spread

const user = { name: "Peter", age: 30 };
const updatedUser = { ...user, job: "Developer" };

console.log(updatedUser); // { name: "Peter", age: 30, job: "Developer" }
  • 기존 객체를 복사하면서 새로운 속성을 추가할 때 사용됩니다.

차이점 요약

연산자 역할 사용 예
rest(...) 여러 개의 값을 하나로 모을 때 함수 인자 수집, 객체/배열에서 나머지 값 추출
spread(...) 값을 펼칠 때 배열/객체 복사, 인자 전달, 배열 합치기

즉,

  • rest(...) → 여러 개의 값을 하나로 모음
  • spread(...) → 하나의 값을 여러 개로 펼침

예제 비교

// rest
function printNames(first, ...rest) {
  console.log(first); // "John"
  console.log(rest);  // ["Jane", "Doe"]
}
printNames("John", "Jane", "Doe");

// spread
const names = ["John", "Jane", "Doe"];
console.log(...names); // "John" "Jane" "Doe"

이해를 돕기 위해 rest는 "모으는 역할", spread는 **"펼치는 역할"**로 기억하면 좋습니다.

728x90