반응형
나머지 매개변수(rest parameter) (...args)
- 정의 :함수의 매개변수 목록에서 ‘나머지’ 인자들을 하나의 배열로 모아주는 문법
- ES6(ECMAScript 2015) 부터 도이
- 타입 : 배열
- ...rest ← rest 파라미터
- rest는 배열(type) 형태로 전달됨
// [문법]
function funcName(고정매개변수, ...rest) {
// 함수 본문
}
function showInfo(name, age, ...skills) {
console.log(name); // 'Jisoo'
console.log(age); // 25
console.log(skills); // ['HTML', 'CSS', 'JS']
}
showInfo('Jisoo', 25, 'HTML', 'CSS', 'JS');
✓ 남은 인자들을 한 덩어리로 모아서 배열로 만듦
주의사항
- rest 파라미터는 마지막에만 사용 가능
function wrong(...rest, a) {} // 에러
- 하나의 함수에 하나만 사용 가능
function wrong(...a, ...b) {} // 에러
rest 파라미터 활용
1. 가변 인자 처리 (가장 흔한 사용)
- 함수가 받을 인자의 개수가 유동적일 때 유용
- 라이브러리나 유틸 함수에서 몇 개의 인자가 들어올지 모를 때 이 패턴을 씀
- 필수 인자 뒤에, 옵션값들을 받을 때 자주 씀 (예: 수치 계산, 통계 함수 등)
- 이전에는 arguments (유사배열)로 처리했지만, rest는 배열이기 때문에 reduce, filter, map 등 고차 함수를 쓸 수 있어서 훨씬 편리하고 안전함.
function multiply(multiplier, ...numbers) {
return numbers.map(n => n * multiplier);
}
multiply(2, 1, 2, 3); // [2, 4, 6]
2. 고정 인자 + 나머지 인자 구분
- 앞부분 인자는 필수, 그 이후는 옵션일 때
- 고정값(예: 이름, 나이) 뒤에 스킬, 옵션 설정, 태그 등 유동값을 넘겨주는 상황
function showInfo(name, age, ...skills) {
console.log(`이름: ${name}`);
console.log(`나이: ${age}`);
console.log(`스킬: ${skills.join(', ')}`);
}
showInfo('Jisoo', 25, 'HTML', 'CSS', 'JavaScript');
- 프론트엔드 개발에선 컴포넌트 함수에 props 전달 시 유사한 패턴이 자주 나타남
createButton('확인', 'primary', 'rounded', 'shadow') // 고정 + 옵션 클래스
3. 디스트럭처링과 함께 사용
- 배열이나 객체에서 대표값 + 나머지 값들을 나눠서 관리할 때
- React, Vue 같은 컴포넌트 기반 프레임워크에서는 상태(state)를 다룰 때 자주 쓰는 패턴
/* 예를 들어 블로그 포스트 리스트가 있을 때:
featuredPost는 메인에 노출하고, otherPosts는 사이드나 목록에 뿌리는 구조가 자주 쓰임.
*/
const [featuredPost, ...otherPosts] = posts;
4. 인자 유효성 검증
- rest 덕분에 "필수값만 체크하고, 나머지는 신경 안 써도 되는" 구조 가능
- 예외 상황만 막고 싶을 때 유용함
- 함수 작성 시 모든 인자를 검사하는 대신,
꼭 필요한 값만 체크하고 나머지는 알아서 처리하도록 만드는 게 유지보수에 좋음
// 메인 기능인 message만 꼭 있어야 하고, 옵션은 많아도 되고 없어도 됨.
function sendMessage(message, ...options) {
if (!message) throw new Error('메시지가 필요합니다');
// options는 폰트, 색상, 속도 등 유동 설정값
}
5. 콜백 함수에 동적 인자 전달
- 동적으로 생성된 값들을 콜백 함수에 넘길 때
- 호출부에서 spread, 콜백부에서는 rest를 받는 패턴
- 활용 : 이벤트 처리, setTimeout, 라이브러리에서 유동 인자를 전달할 때
- 로그 유틸, 에러 핸들러, API 호출 추적기 등에 쓰기 좋음
→ 메시지 종류와 로그 데이터를 자유롭게 넘기고 받기 때문에 확장성 좋고 타입 안전
function logger(...args) {
console.log(`[LOG]:`, ...args);
}
logger('Error', 404, 'Not Found');
6. 배열 메서드 사용 가능
- rest는 arguments와 달리 진짜 배열이기 때문에, filter, sort, map, reduce 같은 고급 처리 가능
- 이전에는 arguments를 Array.from(arguments)로 변환해서 써야 했지만, ...args로 배열 받고 메서드 쓰면 끝
function filterPositive(...nums) {
return nums.filter(n => n > 0);
}
반응형
'JS > Javascript' 카테고리의 다른 글
[javascript] 콜백 함수(callback function) (4) | 2025.08.08 |
---|---|
[javascript] 전개 연산자(Spread Operator) (4) | 2025.08.06 |
[javascript] 함수 4 / 함수 내부 동작 이해 (스코프, 호출 순서, 호이스팅, arauments, 기본값 설정(default parameter) (1) | 2025.08.01 |
[javascript] 재귀 호출 (Recursion) (2) | 2025.07.30 |
[javascript] 함수 2-1 / 기명함수와 익명함수 (1) | 2025.07.30 |