Qaupot Blog
Software Engineering, Trip

104. Overloading (오버로딩)

🕐 Sat, 21 Nov 2020 23:12:03 GMT 🕓 Tue, 24 Aug 2021 12:12:00 GMT

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 로 캐스팅이 가능한 상황입니다. 양 측의 함수중 어느 쪽을 호출해야 할 지 알 수 없으므로 에러가 발생합니다.

이 블로그는 개인 블로그입니다. 게시글은 오류를 포함하고 있을 수 있지만, 저자는 오류를 해결하기 위해 노력하고 있습니다.
게시글에 별도의 고지가 없는 경우, 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 라이선스를 따릅니다.

This blog is personal blog. published posts may contain some errors, but author doing efforts to clear errors.
If post have not notice of license, it under creative commons Attribution-NonCommercial-NoDerivatives 4.0.