SW/C++

C++11 : 디폴트 매개변수에 대해 알아볼까요? (Default Argument)

얇은생각 2018. 12. 30. 07:30
반응형

디폴트 매개변수는 말 그대로 기본 매개변수를 의미합니다. 함수를 정의할 때 매개변수를 넣거나 안 넣으면 되지 왜 디폴트 매개변수가 필요할까요? 그러나 실제로 프로그래밍을 하다보면 항상 넣어줘야 하는 값 마저도 귀찮아 지는 날이 옵니다. 프로그래머는 아주 현명하고 게으른 사람들이 만드는 것이라고 교수님의 말씀이 생각납니다.


다음 예제를 살펴보겠습니다.


#include <iostream>
using namespace std;
 
class Chulsoo
{
public:
    int Eat(int SteakNum);
};
 
int main(void)
{
    Chulsoo chulsoo;
    chulsoo.Eat();
    return 0;
}
 
int Chulsoo::Eat(int SteakNum)
{
    cout << "철수는 " << SteakNum << "원 짜리 스테이크를 먹는다" << endl;
    return SteakNum;
}
cs


인자를 입력하지 않았떠니 오류만 반환하고 컴파일이 되지 않습니다. 디폴트 매개변수 값을 어딘가에 지정해야 한다는 것을 아시겠죠?



디폴트 매개변수를 지정하는 위치

디폴트 매개변수 값을 어디에 지정해야 하는지 다음 예제를 살펴봅시다.


#include <iostream>
using namespace std;
 
class Chulsoo
{
public:
    int Eat(int SteakNum);
};
 
int main(void)
{
    Chulsoo chulsoo;
    chulsoo.Eat();
    return 0;
}
 
int Chulsoo::Eat(int SteakNum=20000)
{
    cout << "철수는 " << SteakNum << "원 짜리 스테이크를 먹는다" << endl;
    return SteakNum;
}
cs


디폴트 매개 변수값을 함수 정의부에 지정했습니다. 결과는 오류가 발생합니다. 


디폴트 매개변수 값을 함수 정의부에 지정한다면 컴파일러는 디폴트 매개변수가 얼마인지 모릅니다. 따라서 함수의 선언부에 지정해줘야 합니다. 그렇다면 다음 코드를 보도록 하겠습니다. 


#include <iostream>
using namespace std;
 
class Chulsoo
{
public:
    int Eat(int SteakNum=20000); // 디폴트 매개변수 값 지정
};
 
int main(void)
{
    Chulsoo chulsoo;
    chulsoo.Eat();
    return 0;
}
 
int Chulsoo::Eat(int SteakNum)
{
    cout << "철수는 " << SteakNum << "원 짜리 스테이크를 먹는다" << endl;
    return SteakNum;
}
cs


7행에서 디폴트 매개변수 값을 함수의 선언부에 지정합니다. 결과를 살펴보면 함수를 호출할 때 특별한 인자 값이 함수를 호출해도 철수가 스테이크를 먹는다고 표현됩니다.



디폴트 매개 변수를 여러 개 사용하기

여러개의 디폴트 매개 변수를 사용해 보겠습니다.


#include <iostream>
using namespace std;
 
class Chulsoo
{
public:
    int Eat(int SteakNum = 20000int WaterNum = 1000int CoffeeNum = 5000);
};
 
int main(void)
{
    Chulsoo chulsoo;
    chulsoo.Eat(); // 20,000원 짜리 스테이크, 1,000원 짜리 물, 5,000원 짜리 커피를 먹는다.
    chulsoo.Eat(30000); // 30,000원 짜리 스테이크를 먹는다.
    chulsoo.Eat(1500); // 1,500원 짜리 물을 먹는다(?)
    chulsoo.Eat(200001500); // 1,500원 짜리 물을 먹는다.
    return 0;
}
 
int Chulsoo::Eat(int SteakNum, int WaterNum, int CoffeeNum)
{
    cout << "철수는 " << SteakNum << "원 짜리 스테이크를 먹고, ";
    cout << WaterNum << "원 짜리 물을 먹고, ";
    cout << CoffeeNum << "원 짜리 커피를 먹는다." << endl;
    return SteakNum;
}
cs


디폴트 매개변수를 여러 개 사용하는 함수 호출에서 디폴트로 지정한 값이 아닌 다른 값을 전달하려면, 다른 값을 지정하고픈 디폴트 매개변수 값 앞에 있는 값들도 지정해야 합니다. 

반응형