[ES6] JavaScript Rest 파라미터 완전 정리: 가변 인자 처리와 Spread 차이
이 문서는 "[ES6] JavaScript Rest 파라미터 완전 정리: 가변 인자 처리와 Spread 차이"를 중심으로,
함수에 전달되는 가변 인자를 안전하고 명확하게 다루는 방법을 설명합니다.
예전의 arguments 대신 ES6의 Rest 파라미터(Rest Parameter)를 사용하면,
전달된 값들을 정확한 배열로 받아와 표준 배열 메서드로 쉽게 처리할 수 있습니다.
1. 📌 Rest 파라미터 기본 정의 및 문법
간단히 말해 Rest 파라미터는 함수 선언에서 식별자 앞에 점 세 개(...)를 붙여
남은 모든 인자를 하나의 배열로 묶는 문법입니다.
"[ES6] JavaScript Rest 파라미터 완전 정리: 가변 인자 처리와 Spread 차이"의 핵심은 이 배열을 어떻게 안전하게 다루느냐에 있습니다.
Rest 파라미터 문법
function myFunc(...rest) {
console.log(rest); // 전달된 나머지 인자들이 배열로 들어옴
}
Rest 파라미터 특징
- 정규 Array: Rest로 수집된 값은 표준 Array이므로
map,filter,reduce를 바로 사용 가능합니다. - 항상 마지막: 문법상 Rest는 매개변수 목록의 맨 끝에 위치해야 하며, 중간에 쓰면 오류가 납니다.
- arguments 대체: 유사 배열인
arguments보다 타입이 명확하고 가독성이 좋아 유지보수에 유리합니다.
2. 📝 사용 예시: 동적 합계 계산
실제로 "[ES6] JavaScript Rest 파라미터 완전 정리: 가변 인자 처리와 Spread 차이"에서 강조하는 것처럼, 인자 수가 변하는 함수는 Rest 파라미터로 훨씬 간결하고 안전하게 구현됩니다. 다음 예시는 다양한 길이의 숫자 인자를 받는 합계 함수입니다.
기본 for-of 루프 사용 예제
function sumAll(...numbers) {
// numbers는 [1, 2, 3, 4]와 같은 배열입니다.
let sum = 0;
for (let number of numbers) {
sum += number;
}
return sum;
}
console.log(sumAll(1, 2, 3, 4)); // 결과: 10
console.log(sumAll(10, 20, 30)); // 결과: 60
Array.reduce()를 활용한 예제
function sumAllWithReduce(...numbers) {
return numbers.reduce((acc, current) => acc + current, 0);
}
console.log(sumAllWithReduce(5, 5, 5)); // 결과: 15
이처럼 Rest 파라미터는 전달되는 인자의 개수가 일정치 않을 때 특히 유용합니다. 필요하면 배열 확인과 타입 검사를 추가해 입력 안정성을 높일 수 있습니다.
3. 🔄 Spread 연산자와의 차이점 (Rest vs Spread)
문법은 동일한 ...를 쓰지만, 기능은 서로 반대입니다.
Rest는 여러 값을 하나로 모으고, Spread는 컬렉션을 개별 요소로 펼칩니다.
이 글, "[ES6] JavaScript Rest 파라미터 완전 정리: 가변 인자 처리와 Spread 차이"에서는 이 구분이 실수 없이 코드를 읽고 작성하는 데 중요하다고 말합니다.
Rest 파라미터 vs Spread 연산자 비교
| 구분 | Rest 파라미터 (...rest) |
Spread 연산자 (...array) |
|---|---|---|
| 역할 | 함수에 전달된 인자들을 배열로 모음 | 배열/객체의 요소를 개별 요소로 펼침 |
| 사용 위치 | 함수 정의 시 매개변수 자리 | 함수 호출 시 인자, 또는 배열/객체 리터럴 내부 |
| 데이터 형태 | 항상 배열 | 배열/이터러블을 분해하여 각 요소로 전달 |
Rest 파라미터와 일반 인자 혼용 예제
자주 쓰이는 패턴은 앞쪽에 고정 인자를 두고, 마지막에 Rest로 나머지를 받는 방식입니다. 이렇게 하면 타입과 위치가 명확해져 호출 쪽과 구현 쪽 모두 읽기 쉬워집니다.
function logDetails(name, age, ...hobbies) {
console.log(`이름: ${name}, 나이: ${age}`);
console.log("취미 목록:", hobbies);
}
logDetails('김개발', 30, '독서', '여행', '코딩');
// 출력:
// 이름: 김개발, 나이: 30
// 취미 목록: ["독서", "여행", "코딩"]
4. ✅ 정리 및 실무 팁
- 가능하면
arguments대신 Rest 파라미터를 사용하세요. 명확한 타입과 배열 메서드 활용이 가능합니다. - 문법상 Rest는 항상 마지막 인자여야 하므로 선언 위치를 지키는 것이 중요합니다.
map,filter,reduce같은 배열 메서드를 적극적으로 활용하면 코드가 더 간결해집니다....문법을 만나면 해당 위치가 정의부인지 호출부인지 먼저 확인해, Rest인지 Spread인지 구분해 읽으세요.
"[ES6] JavaScript Rest 파라미터 완전 정리: 가변 인자 처리와 Spread 차이"에서 배운 원칙을 적용하면, 가변 인자를 처리하는 함수들이 더 안전하고 유지보수하기 쉬워집니다. 간단한 규칙만 지켜도 코드 품질이 눈에 띄게 좋아집니다.
© 2025 칼퇴하는 개발자. 모든 권리 보유.
함께 보면 좋은 엔터프라이즈 사례
🚀 이 주제, 우리 서비스에 어떻게 적용할까요?
[ES6] JavaScript Rest 파라미터 완전 정리: 가변 인자 처리와 Spread 차이를 실제 서비스와 조직에 녹여보고 싶다면, 현재 아키텍처와 운영 방식을 한 번 점검해 보는 것부터 시작해 보세요. 팀 위키나 기술 블로그, 사내 스터디 주제로도 아주 좋습니다.
이 글이 도움이 됐다면, 비슷한 엔터프라이즈 사례 글들도 함께 살펴보면서 우리 조직에 맞는 운영 상용구를 정의해 보세요.
댓글
댓글 쓰기