Rest 파라미터(나머지 매개변수)는 파리미터 이름 앞에 ...
을 붙여서 정의한 파라미터를 의미한다. Rest 파라미터는 함수에 전달된 파라미터들의 목록을 배열로 전달받는다. 함수의 파라미터를 정의하는 방법 중 하나이다.
Rest 파라미터를 쓰면 전달된 파라미터들을 배열([]
)로 감싸주기 때문에 파라미터의 개수가 가변적일 때 유연하게 대처하기 위해서다.
function sum(a, b, c) {
return a + b + c;
}
위 함수는 파라미터를 3개만 받아들이는 함수다. 따라서 아래와 같은 방법으로만 호출할 수 있다.
sum(1, 2, 3); // 6
하지만 파라미터의 개수를 미리 알 수 없다면 Rest 파라미터를 사용하여 다음과 같이 함수를 작성할 수 있다.
function sum(...numbers) {
let result = 0;
for (let i = 0; i < numbers.length; i++) {
result += numbers[i];
}
return result;
}
위 함수는 Rest 파라미터를 이용하여 인자를 배열 형태로 감싼다. 이렇게 하면 파라미터 개수에 제한이 없어지므로, 아래와 같이 다양한 파라미터의 개수를 받아들일 수 있다.
sum(1, 2, 3); // 6
sum(4, 5, 6, 7, 8); // 30
sum(10, 20); // 30
function foo( ...rest, param1, param2) { }
foo(1, 2, 3, 4, 5); // SyntaxError: Rest parameter must be last formal parameter
function foo2(a, ...param1, ...param2){
console.log(파라미터들)
}
Rest 파라미터와 Arguments는 함수의 파라미터를 다루는 데 사용되는 두 가지 방법이다. Rest 파라미터는 ES6에서 도입된 새로운 문법이며, Arguments는 예전부터 JavaScript에서 제공되는 객체다.
Arguments는 함수에 전달된 모든 인자를 포함하는 유사 배열 객체이며, 이 객체는 함수 내부에서 arguments라는 이름의 변수를 통해 접근할 수 있다.
function myFunction() {
console.log(arguments);
}
myFunction(1, 2, 3); // [1, 2, 3]
Arguments는 배열이 아닌 유사 배열 객체이기 때문에, 배열 메소드를 사용하기 위해서는 먼저 배열로 변환해주어야 한다. 또한, Arguments 객체는 함수에 전달된 파라미터의 개수나 타입 등의 정보를 얻을 수 있기 때문에, 이러한 정보를 사용하는 경우에는 Arguments 객체를 사용해야 한다.