JS LAB
JS 2.3 · 2부. 함수와 스코프

기본값·나머지 매개 변수

기본값을 정해 두고, 개수가 정해지지 않은 인자를 받습니다.

예상 학습 시간 13분 실행 단추가 있는 예제는 고쳐서 실행해 볼 수 있습니다 난이도 초급
개념 설명

넘기지 않아도 되게 만듭니다

매개 변수를 넘기지 않으면 그 자리는 undefined 가 됩니다. 그때 대신 쓸 값을 미리 정해 둘 수 있습니다. 이것을 기본값 매개 변수 라고 합니다.

반대로 몇 개가 올지 모를 때 도 있습니다. 그때는 나머지를 한꺼번에 받습니다.

최소 예제 · 편집 가능

기본값 정해 두기

script.js
function greet(name, greeting = "안녕하세요") {
	return `${name}님, ${greeting}`;
}

console.log(greet("홍길동"));
console.log(greet("김철수", "반갑습니다"));
출력
홍길동님, 안녕하세요 김철수님, 반갑습니다

기본값이 있는 매개 변수는 뒤쪽에 둡니다. 앞에 두면 그것을 건너뛰고 뒤엣것만 넘길 방법이 없습니다.

상세 사용법

기본값이 쓰이는 때

넘기지 않았을 때만 쓰입니다. undefined 를 직접 넘겨도 기본값이 쓰이지만, null 이나 빈 글자는 그대로 들어갑니다.

script.js
function show(text = "기본값") {
	console.log(text);
}

show();
show(undefined);
show(null);
show("");
출력
기본값 기본값 null

셋째 줄은 null, 넷째 줄은 빈 글자가 그대로 나온 것입니다. 빈 글자는 눈에 보이지 않아 빈 줄처럼 보입니다.

상세 사용법

나머지를 한꺼번에 받기

매개 변수 앞에 점 셋을 붙이면 넘어온 나머지 값들이 한 덩어리로 들어옵니다. 이 덩어리를 배열(array) 이라고 하며 3부에서 자세히 다룹니다. 여기서는 length 로 개수를 알 수 있고 [0] 처럼 번호로 꺼낼 수 있다는 것만 사용합니다.

script.js
function total(...prices) {
	console.log(`받은 개수: ${prices.length}`);

	let sum = 0;
	for (let i = 0; i < prices.length; i++) {
		sum += prices[i];
	}
	return sum;
}

console.log(total(1000, 2000));
console.log(total(1000, 2000, 3000));
출력
받은 개수: 2 3000 받은 개수: 3 6000

번호는 0부터 셉니다. 1.5 의 문자열 자르기와 같은 규칙입니다.

상세 사용법

앞의 것은 따로 받기

나머지 매개 변수 앞에 보통의 매개 변수를 둘 수 있습니다. 앞에서부터 채우고 남는 것이 덩어리로 들어갑니다.

script.js
function order(customer, ...items) {
	console.log(`${customer}님이 ${items.length}개를 주문했습니다`);
	console.log(`첫 상품: ${items[0]}`);
}

order("홍길동", "연필", "공책", "지우개");
출력
홍길동님이 3개를 주문했습니다 첫 상품: 연필
흔한 실수

처음에 자주 걸리는 것

1. 기본값을 앞쪽에 둡니다

앞에 두면 그것만 건너뛸 방법이 없어, 뒤엣것을 넘기려면 앞엣것도 함께 적어야 합니다. 기본값이 있는 매개 변수는 뒤쪽에 둡니다.

function greet(greeting = "안녕", name) { }   // 쓰기 불편합니다
2. 나머지 매개 변수를 앞에 둡니다

나머지를 받는 것이라 맨 마지막에만 올 수 있습니다. 앞에 두면 구문 오류입니다.

SyntaxError: Rest parameter must be last formal parameter
3. 나머지 매개 변수를 두 개 적습니다

하나만 둘 수 있습니다. 남은 것을 모두 받는 것이라 둘로 나눌 수 없습니다.

실습 문제

직접 해보기

1. 단위를 붙여 주는 함수 난이도 하

숫자와 단위를 받아 "1500원" 처럼 돌려주는 함수를 만드세요. 단위를 넘기지 않으면 "원" 을 씁니다.

const withUnit = (value, unit = "원") => `${value}${unit}`; console.log(withUnit(1500)); console.log(withUnit(3, "개"));
2. 평균 구하기 난이도 중

점수를 몇 개든 받아 평균을 돌려주는 함수를 만드세요. 하나도 넘기지 않으면 0 을 돌려줍니다.

개수가 0이면 나누는 자리가 0이 됩니다. 먼저 걸러 내야 합니다(1.6).
function average(...scores) { if (scores.length === 0) { return 0; } let sum = 0; for (let i = 0; i < scores.length; i++) { sum += scores[i]; } return sum / scores.length; } console.log(average(90, 80, 70)); // 80 console.log(average()); // 0
요약

이 단원의 정리

  • 매개 변수에 = 값 을 적으면 넘기지 않았을 때 그 값이 쓰입니다.
  • 기본값은 undefined 일 때만 쓰입니다. null 과 빈 글자는 그대로 들어갑니다.
  • 점 셋을 붙이면 나머지 값이 한 덩어리(배열)로 들어옵니다.
  • 나머지 매개 변수는 맨 마지막에 하나만 둘 수 있습니다.
  • 덩어리의 개수는 length, 값은 [0] 처럼 0부터 센 번호로 꺼냅니다.