JavaScript에서 함수에 전달된 여러 개의 인수를 다루는 방법은 크게 두 가지가 있습니다. 바로 나머지 매개변수(Rest Parameter)와 arguments 객체입니다. 두 기능은 비슷한 목적으로 사용되지만, 동작 방식과 특성에서 중요한 차이점이 있습니다.
나머지 매개변수(Rest Parameter)란?
나머지 매개변수는 함수로 전달되는 여러 개의 인수를 하나의 배열로 표현할 수 있게 해주는 문법입니다. ES6(ECMAScript 2015)에서 도입되어 개발자들이 가변 인수를 훨씬 편리하게 처리할 수 있도록 만들어졌습니다.
나머지 매개변수는 매개변수 이름 앞에 마침표 세 개(...)를 붙여 선언합니다. 예를 들면 다음과 같습니다.
function sum(...numbers) {
return numbers.reduce((total, n) => total + n, 0);
}
sum(1, 2, 3); // 6
arguments 객체란?
arguments 객체는 현재 실행 중인 함수에 전달된 모든 인수를 담고 있는 유사 배열(array-like) 객체입니다. 화살표 함수를 제외한 모든 일반 함수 내부에서 자동으로 사용할 수 있으며, 별도의 선언 없이 접근할 수 있습니다.
function showArgs() {
console.log(arguments[0]); // 첫 번째 인수
console.log(arguments.length); // 인수 개수
}
나머지 매개변수와 arguments 객체의 차이점
- 포함 범위: arguments 객체는 함수에 전달된 모든 인수를 포함하는 반면, 나머지 매개변수에는 다른 매개변수로 지정되지 않은 나머지 인수들만 담깁니다.
- 배열 여부: 나머지 매개변수는 진짜 Array 인스턴스이기 때문에
map,sort,pop,filter같은 배열 메서드를 그대로 사용할 수 있습니다. 반면 arguments 객체는 배열이 아니라 유사 배열 객체이므로 이러한 메서드를 직접 사용할 수 없습니다. - 호환성: 화살표 함수에서는 arguments 객체를 사용할 수 없지만, 나머지 매개변수는 어디서든 사용 가능하므로 최신 코드에서는 나머지 매개변수를 사용하는 것이 권장됩니다.
결론적으로, 새로운 프로젝트에서는 가독성과 안전성 면에서 우수한 나머지 매개변수를 사용하는 것이 좋으며, arguments 객체는 레거시 코드를 이해하고 유지보수할 때 알아두면 유용합니다.