c++/기초

오버로딩

코드망령 2026. 5. 29. 18:35

오버로딩 (Overloading)

오버로딩은 같은 이름의 함수를 여러 개 정의하는 것이다.

단, 함수 이름은 같아도 매개변수의 형태가 달라야 한다.


기본 예시

void Func(int x);
void Func(float x);
void Func(int x, int y);

위 함수들은 모두 이름이 Func로 같지만, 매개변수가 다르기 때문에 오버로딩이 가능하다.


오버로딩이 가능한 기준

함수의 매개변수 목록이 달라야 한다.

void Func(int x);
void Func(float x);
void Func(int x, int y);
void Func(float x, int y);

가능한 차이

  • 매개변수 개수 차이
  • 매개변수 타입 차이
  • 매개변수 순서 차이

매개변수 개수 차이

void Func(int x);
void Func(int x, int y);

매개변수 타입 차이

void Func(int x);
void Func(float x);

매개변수 순서 차이

void Func(int x, float y);
void Func(float x, int y);

오버로딩이 불가능한 경우

반환형만 다른 함수는 오버로딩할 수 없다.

int Func(int x);
float Func(int x); // 오류

함수를 호출할 때 반환형만 보고 어떤 함수를 호출할지 결정할 수 없기 때문이다.

Func(10);

위 코드만 보면 int를 반환하는 함수인지 float를 반환하는 함수인지 알 수 없다.


오버로딩 호출 예시

#include <iostream>
using namespace std;

void Func(int x)
{
    cout << "int 함수" << endl;
}

void Func(float x)
{
    cout << "float 함수" << endl;
}

void Func(int x, int y)
{
    cout << "int 2개 함수" << endl;
}

int main()
{
    Func(10);
    Func(3.14f);
    Func(10, 20);
}

실행 결과

int 함수
float 함수
int 2개 함수

모호성 오류

오버로딩된 함수 중 어떤 함수를 호출해야 할지 컴파일러가 결정하지 못할 때 발생한다.

void Func(long x);
void Func(double x);

Func(10);

10int 리터럴이다.

intlong으로도 변환할 수 있고, double로도 변환할 수 있다.

그래서 두 함수 모두 호출 후보가 된다.

Func(long)
Func(double)

컴파일러가 어느 쪽을 선택해야 할지 결정하지 못하면 모호성 오류가 발생한다.


해결 방법

호출할 함수의 타입을 명확하게 지정하면 된다.

형변환 사용

Func(static_cast<long>(10));

또는

Func((long)10);

타입 접미사 사용

Func(10L);

10Llong 타입 리터럴이다.


double 호출

Func(10.0);

또는

Func(static_cast<double>(10));

주의할 점

오버로딩을 너무 많이 만들면 어떤 함수가 호출되는지 헷갈릴 수 있다.

특히 다음처럼 비슷한 타입이 많으면 주의해야 한다.

void Func(short x);
void Func(long x);
void Func(float x);
void Func(double x);

정리

  • 오버로딩은 같은 이름의 함수를 여러 개 정의하는 것이다.
  • 매개변수의 개수, 타입, 순서가 달라야 한다.
  • 반환형만 다른 함수는 오버로딩할 수 없다.
  • 컴파일러는 전달된 인자의 타입을 보고 호출할 함수를 결정한다.
  • 여러 함수가 동시에 후보가 되면 모호성 오류가 발생할 수 있다.
  • 형변환이나 타입 접미사를 사용하면 모호성을 해결할 수 있다.

'c++ > 기초' 카테고리의 다른 글

매크로  (0) 2026.05.31
정적 변수  (0) 2026.05.29
형변환  (0) 2026.05.29
전역변수와 지역변수  (0) 2026.05.29
함수  (0) 2026.05.29