JavaScript에서 Spread와 Rest 연산자

발행: (2026년 4월 4일 오후 06:20 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

Spread vs Rest Operators in JavaScript에 대한 표지 이미지

최근에 백엔드 코드를 많이 작성하면서 spread operatorrest operator를 언제 사용해야 하는지 혼란스러웠습니다. 많은 개발자들이 같은 문제를 겪고 있기 때문에, 이번 포스트에서는 차이점을 자세히 설명하고, 일반적인 사용 사례를 보여주며, 피해야 할 흔한 실수를 짚어보겠습니다.

다룰 주제

  • rest 연산자가 하는 일
  • spread 연산자가 하는 일
  • spread와 rest의 차이점
  • 각 연산자를 언제 사용해야 하는지

Source:

Rest 연산자

Rest 연산자는 명시적으로 나열되지 않은 나머지 값을 수집합니다. 주로 구조 분해 할당과 함수 매개변수에서 사용됩니다.

예시 (객체 구조 분해)

const user = {
  id: 1,
  name: "Kunal",
  email: "kunal@gmail.com",
  role: "admin",
  password: "secret"
};

// REST → extract password, collect the rest
const { password, ...safeUser } = user;

console.log(safeUser);

출력

// Password is extracted
{ id: 1, name: "Kunal", email: "kunal@gmail.com", role: "admin" }

Rest 연산자는 할당문의 왼쪽에 위치하여 남은 프로퍼티들을 새로운 객체(또는 배열에 사용할 경우 새로운 배열)로 모읍니다.

함수 매개변수에서의 Rest

function sum(first, ...rest) {
  return rest.reduce((total, n) => total + n, first);
}

console.log(sum(1, 2, 3, 4)); // 9

여기서 ...rest는 첫 번째 인자 이후의 모든 인자를 배열로 수집합니다.

스프레드 연산자

스프레드 연산자는 반복 가능한 객체(배열 또는 객체)의 요소들을 새로운 컨텍스트로 펼치기(“spread”)합니다. 주로 데이터 구조를 복사하거나 병합할 때 사용됩니다.

예시 (객체 병합)

const user = {
  id: 1,
  name: "Kunal",
  email: "kunal@gmail.com",
  role: "admin",
  password: "secret"
};

// SPREAD → 객체 병합 / 업데이트
const updatedUser = {
  ...user,
  role: "user"
};

console.log(updatedUser);

출력

{
  id: 1,
  name: "Kunal",
  email: "kunal@gmail.com",
  role: "user",
  password: "secret"
}

스프레드 연산자는 대입 연산자의 오른쪽에 위치하여 기존 데이터를 펼친 뒤, 속성을 추가하거나 덮어쓸 수 있게 합니다.

배열과 함께 사용하기

const numbers = [1, 2, 3];
const moreNumbers = [...numbers, 4, 5];
console.log(moreNumbers); // [1, 2, 3, 4, 5]

스프레드와 레스트의 차이점

특징스프레드 연산자레스트 연산자
목적값을 확장남은 값을 수집
사용 위치우측 (예: 리터럴, 함수 호출)좌측 (예: 구조 분해, 함수 매개변수)
출력개별 값 (또는 얕은 복사)수집된 값을 포함하는 배열 또는 객체
일반적인 사용 사례값 복사, 병합 또는 전달남은 값을 하나의 변수에 모음
동작“데이터를 열다”“데이터를 묶다”

각 연산자를 사용할 때

  • Rest Operator남은 항목들을 배열이나 객체에 수집해야 할 때 사용합니다. 예:

    • 함수 매개변수 목록 (function fn(a, b, ...rest) {})
    • 구조 분해 할당 (const { a, ...rest } = obj)
  • Spread Operator – 데이터 구조를 복제하거나 병합하고 싶을 때 사용합니다. 예:

    • 배열/객체의 얕은 복사 만들기 (const copy = [...original])
    • 여러 배열이나 객체 병합하기 (const merged = { ...obj1, ...obj2 })
    • 함수 호출 시 요소 펼치기 (myFunc(...args))

읽어 주셔서 감사합니다! 이 글이 마음에 드셨다면 관련 주제의 다른 글도 자유롭게 살펴보세요.

0 조회
Back to Blog

관련 글

더 보기 »

JavaScript에서 디스트럭처링

이런 코드를 작성해 본 적 있나요? js // 반복적인 추출 const numbers = 10, 20, 30; const first = numbers0; const second = numbers1; 작동은 하지만—…

동기 vs 비동기 JavaScript

JavaScript는 single‑threaded이지만, synchronous와 asynchronous 동작을 사용하여 여러 작업을 효율적으로 처리할 수 있습니다. What Is Synchronous Code? Synchronous…

JavaScript에서 오류 처리: Try, Catch, Finally

코드가 아무리 좋아도 오류는 피할 수 없습니다. 중요한 것은 오류를 어떻게 처리하느냐입니다. JavaScript는 try, catch, finally와 같은 강력한 도구를 제공합니다...

JavaScript에서 함수 이해하기

함수란 무엇인가? 함수는 특정 작업을 수행하도록 설계된 코드 블록이다. 같은 코드를 반복해서 작성하는 대신, 한 번만 코드 블록 안에 작성하면 된다.