Default Argument
디폴트 매개변수
- 함수호출에서 Argument(실제 매개변수)를 생략했을 경우에 실제 매개변수 대신 사용되는 값이다.
(물론, 실제 매개변수로 특정 값이 입력되면, 그 값으로 처리된다.)
- 디폴트 값은 Function Prototype(함수 원형) 부분에서 설정 가능하며, Function Definition(함수 정의) 부분은 일반적인 경우와 동일하게 작성하면 된다.
- 컴파일러는 함수 원형을 조사하고 해당 함수의 매개변수 개수를 알아내는데, 이 때 프로그래머는 디폴트 매개변수의 존재 유무를 알려주는 방식이다.
- 특히 클래스 설계시에, 디폴트 매개변수를 설정할 수 있는 상황이라면, 생성자, 메서드, 메서드 오버로딩의 개수를 많이 줄여줄 수 있다.
* 가능한 범위내에서, 디폴트 매개변수를 통한 일반화 작업이 우선시 되어야 하고, 부족한 경우에는 함수 오버로딩을 통해 구현하는 것이 바람직하다.
- 디폴트 매개변수로 하나의 함수만 구현하게 되면, 빠른 함수 작성이 가능하고, 메모리 효율성도 증가하며, 수정이 용이하다는 장점이 있다.
디폴트 매개변수의 사용 규칙
- 디폴트 매개변수는 매개변수 리스트의 오른쪽에서 왼쪽 방향으로 채워져야 한다.
- 중간에 몇몇 매개변수를 건너뛰고 디폴트 값을 설정하는 것은 허용되지 않는다. (오른쪽부터 차례대로 채워나가야 한다.)
- 함수 호출부에서, 실제 매개변수는 왼쪽에서 오른쪽으로 가면서 해당되는 Parameter(형식 매개변수)에 대입된다.
- 함수 호출부에서, 대입할 매개변수를 중간에 건너뛰는 것은 허용되지 않는다.
Ex. 디폴트 매개변수를 정의하는 예시
// 옳은 예시
int harpo (int n, int m = 4, int j = 5);
int chico (int n = 1, int m = 3, int k =7);
val = harpo(2); // harpo(2, 4, 5);
val = harpo(2, 3); // harpo(2, 3, 5);
val = chico (14, 28, 3) // chico(14, 28, 3);
// 틀린 예시
int groucho (int k, int m = 2, int o); // 오른쪽부터 채워나가야 한다!
val = chico (3, , 8); // 건너뛸 수 없다!