Rest Parameter란?
- Rest Parameter는 함수 매개변수로 전달된 나머지 인수들을 배열로 묶어주는 기능입니다.
- 매개변수 이름 앞에 ...(점 3개, 스프레드 연산자) 를 붙여 선언합니다.
- 함수 호출 시 전달된 인수의 개수가 고정되지 않았을 때, 가변 인수를 처리하기 위해 사용합니다.
2️⃣ 기본 문법
function myFunction(...rest) {
console.log(rest); // 전달된 모든 인수가 배열로 출력됨
}
- ...rest는 함수 호출 시 넘겨받은 모든 나머지 인수를 배열로 저장합니다.
- 반드시 마지막 매개변수로 선언해야 합니다.
3️⃣ Rest Parameter 사용 예제
예제 1: 모든 인수 출력하기
function logAllArguments(...args) {
console.log(args);
}
logAllArguments(1, 2, 3, 4, 5); // [1, 2, 3, 4, 5]
- 함수 호출 시 전달된 인수 1, 2, 3, 4, 5가 배열로 묶여 args에 저장됩니다.
예제 2: 고정 매개변수와 Rest Parameter 사용
function sumNumbers(first, second, ...rest) {
console.log(`First: ${first}`); // 1
console.log(`Second: ${second}`); // 2
console.log(`Rest: ${rest}`); // [3, 4, 5]
}
sumNumbers(1, 2, 3, 4, 5);
- 고정 매개변수(first, second)는 각각 첫 번째와 두 번째 인수를 받습니다.
- 나머지 인수(3, 4, 5)는 ...rest에 배열로 저장됩니다.
예제 3: 배열 합계 구하기
function sum(...numbers) {
return numbers.reduce((total, num) => total + num, 0);
}
console.log(sum(1, 2, 3, 4)); // 10
- Rest Parameter로 전달받은 숫자 배열(numbers)을 reduce 메서드로 합산합니다.
예제 4: 동적 HTML 태그 생성
function createElement(tag, ...content) {
console.log(`Tag: ${tag}`);
console.log(`Content: ${content}`);
}
createElement("div", "Hello", "World", "!");
// Tag: div
// Content: ["Hello", "World", "!"]
- Rest Parameter는 태그 이름 외에 모든 내용을 동적으로 처리하는 데 유용합니다.
4️⃣ Rest Parameter의 특징과 규칙
1. Rest Parameter는 반드시 마지막 매개변수여야 합니다.
function incorrectUsage(...rest, anotherParam) {
// SyntaxError: Rest parameter must be last formal parameter
}
2. Rest Parameter는 항상 배열로 반환됩니다.
function showRest(...args) {
console.log(Array.isArray(args)); // true
// console.log(args); // [1, 2, 3]
}
showRest(1, 2, 3);
3. Rest Parameter와 arguments의 차이점
특징 Rest Parameter (...) arguments 객체
형태 | 배열 | 유사 배열 객체 |
사용 가능한 메서드 | 배열 메서드 사용 가능 (map, reduce 등) | 배열 메서드 사용 불가 |
스코프 | 화살표 함수 및 일반 함수 모두 사용 가능 | 화살표 함수에서 사용 불가 |
예제
function compareRestAndArguments(...rest) {
console.log(rest); // [1, 2, 3]
console.log(arguments); // 유사 배열 객체: {0: 1, 1: 2, 2: 3}
}
compareRestAndArguments(1, 2, 3);
5️⃣ Rest Parameter와 Spread Operator의 차이
Rest Parameter: 나머지 인수 묶기
- 함수의 매개변수로 사용되며, 전달된 나머지 인수들을 배열로 묶어줍니다.
- 정의 시 사용 → 전달된 나머지 인수들을 배열로 묶음.
- 문법: function(...args) {}
예제
function collectRest(...args) {
console.log(args); // 전달된 나머지 인수들이 배열로 묶임
}
collectRest(1, 2, 3, 4); // [1, 2, 3, 4]
동작 설명:
- ...args는 함수 호출 시 전달된 모든 인수를 하나의 배열로 묶습니다.
- 결과적으로 args는 [1, 2, 3, 4]라는 배열이 됩니다.
Spread Operator: 배열이나 객체 풀기
- 배열 또는 객체의 요소를 개별적으로 풀어줍니다.
- 사용 시점: 함수 호출, 배열/객체 생성 시 사용됩니다.
- 문법: Math.max(...array)
예제
const numbers = [1, 2, 3, 4];
console.log(Math.max(...numbers)); // 4
동작 설명:
- ...numbers는 [1, 2, 3, 4] 배열의 요소를 개별 값으로 풉니다.
- 결과적으로 Math.max는 Math.max(1, 2, 3, 4)로 실행되어 최댓값 4를 반환합니다.
Rest vs Spread 한눈에 보기
특징 Rest Parameter Spread Operator
용도 | 나머지 인수들을 배열로 묶음 | 배열/객체 요소를 개별로 확장 |
사용 위치 | 함수 선언부의 매개변수 | 함수 호출, 배열/객체 생성 |
문법 예시 | function(...args) {} | Math.max(...array) |
결과 형태 | 배열로 묶임 | 개별 값으로 풀림 |
6️⃣ Rest Parameter 활용 사례
1. 동적 인수 처리
- 매개변수의 개수를 미리 알 수 없을 때 Rest Parameter로 유연하게 처리 가능.
function concatenateStrings(...strings) {
return strings.join(" ");
}
console.log(concatenateStrings("Hello", "World", "!")); // "Hello World !"
2. 다중 인수 분리
- 고정 인수와 나머지 인수를 분리하여 처리 가능.
function processValues(first, ...others) {
console.log(`First: ${first}`); // 10
console.log(`Others: ${others}`); // [20, 30, 40]
}
processValues(10, 20, 30, 40);
7️⃣ 요약
특징 | 설명 |
Rest Parameter | 전달된 나머지 인수를 배열로 묶음. |
문법 | 매개변수 이름 앞에 ... 추가 (function(...args)) |
제한사항 | 반드시 마지막 매개변수로 선언. |
배열 메서드 사용 가능 여부 | 가능 (Rest Parameter는 배열로 반환). |
arguments와의 차이점 | Rest Parameter는 배열, arguments는 유사 배열 객체. |
'Programming > JavaScript' 카테고리의 다른 글
동기(Synchronous) vs 비동기(Asynchronous)의 의미 차이 (0) | 2025.02.18 |
---|---|
Three.js란? (2) | 2025.02.10 |
함수로 알아보는 자바스크립트: 일급 객체와 즉시 호출 함수(IIFE) (2) | 2025.01.07 |
자바스크립트 함수 선언과 함수 표현식 (4) | 2025.01.07 |
자바스크립트의 변수와 스코프 (0) | 2025.01.07 |