본문 바로가기

컴퓨터 공학 일지/C++

C++ 디폴트 값

C++에서는 함수의 매개변수에 디폴트 값 설정이 가능하다.

 

디폴트(default)란, 사전적의 의미론 체납, 채무 불이행 등등의 뜻이 있습니다.

 

프로그래밍 언어에서의 디폴트는 비슷하지만 조금 다른 의미를 가지고 있습니다.

 

필자가 생각하기엔 최초의 시작값이라고 이야기하고 싶습니다.

 

우선 디폴트값을 설정하는 법 부터 알아보죠.

 

C++에서의 디폴트값 선언

 

 

int Function(int num=10){
	return num+1;
}

 

앞서 보던 매개변수와는 조금 다른 모습을 보이지요.

 

기존 매개변수는 다음과 같이 선언 했습니다.

 

int Function(int num){
	return num;
}

 

위의 매개변수는 int num=10 그리고 기존의 방식은 int num 으로 선언되어 있지요.

 

이를 해석하자면 매개변수를 생성하자마자 초기화 한다고도 할 수 있겠네요.

 

하지만 다른 의미를 가집니다.

 

만약에 Function을 호출할 때 인자를 전달하지 않으면 num은 10의 값을 가지겠다.

 

즉, 다음과 같이 이해 할 수 있습니다.

 

Function();  //매개 인자없이 호출하여 num의 값은 10이 된다.
Function(5); //매개 인자가 정수 5를 전달하니 num의 값은 5가 된다.

 

이해가 되셨나요?

 

조금 더 이해를 할 수 있도록 심화된 예제 2가지를 작성 해보겠습니다.

 

#include <iostream> 

int Function(int n = 10, int m = 20, int i = 30, int j = 40) {
	return n + m + i + j;
}

int main(void) 
{
	std::cout << Function(5) << std::endl;
	std::cout << Function(5, 10) << std::endl;


}

 

실행 결과 

95

85

 

#include <iostream> 

int Function(int n = 10, int m = 20, int i = 30, int j = 40) {
	return n + m + i + j;
}

int main(void) 
{
	std::cout << Function(5) << std::endl;
	std::cout << Function(5, 10) << std::endl;
	std::cout << Function( , , , 5) << std::endl;

}

실행 결과

에러가 발생하여 실행되지 않음

 

왜 첫번째 예제는 실행이 되고 두번째 예제는 실행이 되지않을까요?

 

이유는 간단합니다.

 

우리는 매개변수가 있는 함수를 호출할 때 인자를 전달합니다.

하지만 그 매개변수가 여러개라면 좌측부터 인자값이 전달됩니다.

그렇기에 두번째 예제에서는 4개의 매개 변수 중 4번째의 매개 변수에만 인자를 전달하려고 하였기에 오류가 발생하는것입니다.

 

이로써 우리는 함수를 호출하며 인자를 전달할 때는 좌측부터 시작한다는것을 깨닫게 되었습니다.

 

그리고 C++에서는 함수의 원형을 별도로 선언할 수 있습니다.

 

이때 디폴트 값은 함수의 원형에만 선언하시면됩니다.

 

#include <iostream>

int Function(int num=10, int num2=20); // 함수의 원형

int main(void)
{
	std::cout<<Function()<<std::endl;
	return 0;
}

int Function(int num, int num2){
	return num+num2;
}

 

위 예제와 같이 함수의 원형을 별도로 선언할 경우 원형에서만 디폴트값을 사용해주시면 됩니다.

 

그리고 우리는 여기서 또 한가지의 사실을 발견할 수 있습니다.

 

기존에는 디폴트 값을 사용하지 않고 매개변수 원형 그대로 사용했었는데 그렇다는것은 여러개의 매개변수가 있을 때 어떤 매개변수는 디폴트 값을 적용하고 어떤 매개변수는 적용하지 않아도 될까?

 

네 됩니다.

 

그것을 부분적 디폴트 선언이라고합니다.

 

몇가지 예를 들어보겠습니다.

 

int Function(int num, int num2 = 5, int num3 = 10)

int Function(int num, int num2, int num3 = 10)

 하지만 여기서 유의 할 점이 있습니다.

 

앞서 말씀드린것처럼 우리가 알게된 사실이 있습니다.

 

함수는 매개인자를 전달받을때 왼쪽에서부터 오른쪽으로 채워진다는 사실이죠.

 

그렇기 때문에 우리가 부분적 디폴트 선언을 할 경우에 좌측부터 디폴트 선언을 하거나 중간 매개 변수만 디폴트 선언을 하지않는다거나 한다면 오류가 발생합니다.

 

이를 예제로 들어보겠습니다.

 

int Function(int n = 10 , int n2 = 15, int n3) // 잘못된 예
int Function(int n, int n2 = 10, int n3)       // 잘못된 예
int Function(int n = 10 , int n2, int n3)      // 잘못된 예
int Function(int n = 10 , int n2, int n3 = 15) // 잘못된 예

 

위 처럼 3개의 매개 변수들을 이용하여 잘못된 예의 경우의 수를 작성해보았습니다.

 

우리는 매개변수에 디폴트값을 설정해줄경우 우측부터 차례대로 작성해주어야합니다.

 

 

오타,개념오류 등에 대한 요청은 댓글 혹은

4538cgy@gmail.com로 말씀해주시면 최대한 빠른 시간안에 수정해드리겠습니다.