'디폴트 매개변수'란 말그대로 매개변수의 디폴트 값을 지정할 수 있다는 것을 의미합니다.

간단한 시나리오로 예를 들어보겠습니다.

// 2013년에 A개발자가 만든 함수(라이브러리)
int CalcLayout(int nWidth, int nHeight) {
    return nWidth + nHeight;
}

// 2013년에 B개발자가 해당 함수(라이브러리)를 사용합니다.
void main() {
    CalcLayout(25, 50);
}

 

시간이 흐른 후, A개발자는 이전에 만들었던 함수(라이브러리)를 수정하려고 합니다.

// 2013년에 A개발자가 만든 함수(라이브러리) -> A개발자는 2019년에 해당 함수(라이브러리)를 수정하려합니다.
int CalcLayout(int nWidth, int nHeight, int nType = 0) {
    return nWidth + nHeight + nType;
}

// 2013년에 B개발자가 해당 함수(라이브러리)를 사용하는 코드를 작성했지만 에러가 나지 않습니다.
// 원형이 변경되었지만, 새로 추가된 매개변수에 디폴트 값을 지정함으로써 이전에 작성된 코드의 에러를 막습니다.
void main() {
    CalcLayout(25, 50);
}

함수의 원형을 변경했지만, 이전에 B개발자가 작성했던 코드의 안정성은 보장받을 수 있습니다.

 

'디폴트 매개변수'는 위와 같이 꼭 필요한 경우가 아니라면, 되도록 지양하는 것이 좋습니다. '디폴트 매개변수'를 생략해 호출할 수 있으므로 사용자측에서 함수의 원형을 파악하기 힘들뿐만 아니라, 어떤 함수의 원형이 호출되어야하는지 모호해지는 상황이 발생할 수 있기 때문입니다.