Rest Parameter
나머지 매개 변수(rest parameter) 구문은 정해지지 않은 수(an indefinite number, 부정수)를 배열로 나타낼 수 있게 합니다.
영상 강의
PART 1
codepen
예제
ES5에서는 기본 값(default values), 정해지지 않은 인자(indefinite arguments), 이름이 있는 매개 변수(named parameters)를 다루는 함수 구현 방법이 너무 많았습니다. ES6+ 부터는 보다 간결한 문법을 통해 이것들을 모두 다룰 수 있습니다.
나머지 매개 변수(Rest Parameter)
기존 코드에서는 인자의 숫자가 정해지지 않은 경우 다음과 같이 처리했습니다.
function logArguments() {
for (var i=0, l=arguments.length; i < l; ++i) {
console.log(arguments[i]);
}
}
ES6+ 부터는 전개 연산자를 사용해 다음과 같이 정해지지 않은 인자의 집합을 처리할 수 있습니다.
function logArguments(...args) {
args.forEach(arg => console.log(arg));
}
이름이 있는 매개 변수(Named Parameter)
기존 코드에서 이름이 있는 매개 변수를 처리하는 방법 중 하나는 jQuery 코드에서 영감을 받은 객체 옵션(Option Object) 패턴을 사용하는 것입니다.
function initializeCanvas(options) {
const height = options.height || 720;
const width = options.width || 480;
const lineStroke = options.lineStroke || '#122122';
console.log(`height = ${height}`);
console.log(`width = ${width}`);
console.log(`lineStroke = ${lineStroke}`);
}
ES6+ 부터는 구조 분해 할당(Destructuring Assignment)을 사용해 보다 손쉽게 이름이 있는 매개변수를 구현할 수 있습니다.
function initializeCanvas({ height=720, width=480, lineStroke='#122122'}) {
console.log(`height = ${height}`);
console.log(`width = ${width}`);
console.log(`lineStroke = ${lineStroke}`);
}
initializeCanvas({
lineStroke: '#786e51'
});
주의!
단, 함수의 인자를 전달하지 않은 경우 null
이 전달되어 오류가 발생합니다.
// Cannot destructure property `height` of 'undefined' or 'null'.
initializeCanvas();
인자를 전달하지 않아도 오류 없이 기본 설정된 매개 변수를 사용하려면 다음과 같이 빈 객체를 기본 매개변수로 설정합니다.
function initializeCanvas({ height=600, width=400, lineStroke='black'} = {}) {
console.log(`height = ${height}`);
console.log(`width = ${width}`);
console.log(`lineStroke = ${lineStroke}`);
}
initializeCanvas(); // OK