JavaScript의 rest 연산자

이 강의를 시작하기 전에 몇 가지 설명을 드리겠습니다. 이 섹션의 이전 모든 강의에서, 저는 연산자 ...에 대한 모든 사실을 말씀드리지 않았습니다.

사실 이 연산자는 코드에서의 위치에 따라 spread 연산자 또는 rest 연산자라고 불릴 수 있습니다.

이미 아시다시피, spread 연산자가 배열이나 문자열 앞에 올 때, 그것들을 개별 값으로 분해합니다. Rest 연산자는, 비록 ...와 같은 문법을 가지고 있지만, 다른 목적을 위해 사용됩니다.

지금부터 그 목적에 대해 알아보겠습니다. 두 개의 매개변수를 받는 함수가 있다고 가정해 봅시다:

javascriptfunction func(a, b) {
  console.log(a);
  console.log(b);
}

함수에 불필요한 매개변수를 전달해도 오류가 발생하지 않는다는 것을 이미 알고 계실 것입니다:

javascriptfunc(1, 2, 3, 4, 5);

rest 연산자를 사용하면 모든 불필요한 매개변수를 배열 형태로 얻을 수 있습니다. 이를 위해 함수에 (반드시 마지막에) 또 다른 매개변수를 추가하고, 그 앞에 3개의 점을 찍습니다:

javascriptfunction func(a, b, ...rest) {
  
}

이 세 개의 점이 rest 연산자이며, 변수 이름은 무엇이든 될 수 있지만, 보통 역시 rest라고 부르는 것이 일반적입니다.

불필요한 매개변수를 많이 사용하여 함수를 호출하고, 무엇이 매개변수 a와 b에 들어가고, 무엇이 나머지 rest에 들어가는지 살펴봅시다:

javascriptfunc(1, 2, 3, 4, 5);

function func(a, b, ...rest) {
  console.log(a);    // 1을 출력합니다
  console.log(b);    // 2를 출력합니다
  console.log(rest); // [3, 4, 5]를 출력합니다
}

불필요한 매개변수가 없다면, 변수 rest에는 빈 배열이 기록됩니다:

javascriptfunc(1, 2);

function func(a, b, ...rest) {
  console.log(a);    // 1을 출력합니다
  console.log(b);    // 2를 출력합니다
  console.log(rest); // []를 출력합니다
}

함수에 매개변수가 전혀 없을 수도 있지만, 동시에 rest를 추가할 수 있습니다. 이 경우 함수는 임의의 개수의 매개변수로 호출할 수 있으며 모든 매개변수가 배열 rest에 들어갑니다:

javascriptfunction func(...rest) {
  console.log(rest);
}