Overloading (오버로딩)
오버로딩은 같은 이름의 함수를 여러벌 정의하는 것을 말합니다. 컴파일러는 함수 호출문을 해석할 때, 인수를 참고하여 최대한 호출에 적합한 함수를 찾습니다.
C 에서는, 동일한 기능일지라도 각각 별도의 이름을 가진 함수를 작성해야 했습니다.
int plusInt(int op1, int op2)
{
return op1+op2;
}
double plusDouble(double op1, double op2)
{
return op1+op2;
}
int plus(int op1, int op2)
{
return op1+op2;
}
double plus(double op1, double op2)
{
return op1+op2;
}
C 에서 전자 예제처럼 작성해야 했다면, C++ 에서는 후자 예제 코드를 사용할 수 있습니다.
오버로딩은 함수에 이름을 붙일때 군더더기 없는 깔끔한 이름을 지을 수 있도록 도와줍니다.
그러나, 함수의 선택에 관한 부분이 자동으로 이루어지므로, 프로그래머가 예상치 못한 함수 호출이 발생할 가능성 역시 존재합니다.
- 목표로 하는 함수가 확실히 호출되고 있는지 확인하는 것이 좋습니다.
아래의 Case1과 Case2는 동작하지만, Case3은 동작하지 않습니다.
Case 1. int 2개의 인수를 대입
int main(int argc, char** argv)
{
plus(10,20);
return 0;
}
int 인수를 사용하는 plus 함수가 호출됩니다.
Case 2. float 2개의 인수를 대입
int main(int argc, char** argv)
{
plus(10.2,20.1);
return 0;
}
float 형과 호환이 되는 double 의 인수를 사용하는 plus 함수가 호출됩니다.
Case 3. int 와 double 을 혼용
int main(int argc, char** argv)
{
plus(10.3,20);
return 0;
}
double 은 int 로 캐스팅이 가능하며, int 역시 double 로 캐스팅이 가능한 상황입니다. 양 측의 함수중 어느 쪽을 호출해야 할 지 알 수 없으므로 에러가 발생합니다.