함수 오버로딩은 C++에서 동일한 이름을 가진 함수를 여러 개 정의하는 것을 말합니다. 이러한 기능을 통해 하나의 함수명으로 여러 가지 입력 타입을 다룰 수 있습니다.
함수 오버로딩의 장점
함수 오버로딩을 사용하면 코드의 가독성이 향상됩니다. 예를 들어, calculateArea(int radius)
와 calculateArea(int length, int width)
두 함수를 각각 작성하는 것보다, 단순히 calculateArea
라는 이름의 함수를 각각 다르게 정의하는 것이 코드를 이해하고 유지보수하기 쉽게 만들어 줍니다.
함수 오버로딩의 예제
다음은 함수 오버로딩의 간단한 예제입니다.
#include <iostream>
using namespace std;
// 정수형 인자를 받는 함수 오버로딩 예제
void print(int i) {
cout << "정수값: " << i << endl;
}
// 실수형 인자를 받는 함수 오버로딩 예제
void print(double f) {
cout << "실수값: " << f << endl;
}
int main() {
print(5); // 정수값: 5
print(500.263); // 실수값: 500.263
return 0;
}
위 예제에서 print
라는 함수명을 가진 함수가 두 번 정의되어 있습니다. 첫 번째 함수는 정수를, 두 번째 함수는 실수를 출력하도록 정의되어 있습니다.
함수 오버로딩과 이름 맹소화
함수 오버로딩은 이름 맹소화(name mangling)라는 프로세스를 통해 이루어집니다. 이름 맹소화란 같은 이름을 가진 함수들을 구분하기 위해 컴파일러가 각 함수의 시그니처(파라미터 타입과 순서)를 바탕으로 각 함수에 대한 유일한 이름을 생성하는 과정을 말합니다. 따라서 C++ 컴파일러는 함수 오버로딩을 가능하게 하기 위해 각 함수를 식별하기 위한 독특한 이름을 만들어 냅니다.
이러한 이름 맹소화로 인해 동일한 이름을 가진 함수들도 컴파일러가 각각의 함수를 식별할 수 있게 되며, 이를 통해 함수 오버로딩을 구현할 수 있게 됩니다.
함수 오버로딩은 C++의 강력한 기능 중 하나로, 코드의 가독성을 향상시키고 유지보수를 용이하게 해 줍니다.
참고문헌:
- https://docs.microsoft.com/en-us/cpp/cpp/functions?view=msvc-160
- https://en.cppreference.com/w/cpp/language/function_overloading