본문 바로가기
언어/C++

[C++ 기본 공부정리] 11-6. 함수 오버로딩(function overloading)

by 민-Zero 2019. 12. 21.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다.

틀린 부분에 대한 지적은 감사합니다.

1. 함수 오버로딩(function overloading)

함수 오버로딩은 매개변수의 개수나 형태를 다르게 설정하여 같은 이름의 함수를 재정의 하여 동일한 이름을 가진 함수를 여러 개 만드는 것이다. 즉, 동일한 기능을 수행하는 함수를 매개변수에 차이를 주어 하나의 이름으로 작성할 수 있게 해 준다. 함수 오버로딩은 객체지향 프로그래밍의 특징 중 다형성(polymorphism)의 구현이다.

 

예를 들어 변수의 경우 동일한 이름으로 변수를 중복하여 만들 경우 문법상으로는 오류가 발생하지 않지만 컴파일하게 되면 변수가 재정의 되었다는 오류가 발생하게 된다.

 

하지만 함수의 경우 동일한 기능을 하지만 인수로 전달받는 데이터 타입으로 인해 결과만 다르다면 하나하나 다른 이름을 고민하기보다 오버로딩을 통해 더 나은 해결책을 고안해 낼 수 있다.

 

인수로 값 2개를 받아 두 값의 합을 출력하는 함수를 생성한다고 가정하자. 만약 매개변수가 int형으로 되어있는대 소수점 계산도 해서 출력해야 한다면 새로운 함수를 만들어 상황별로 다른 함수를 호출해야 할 것이다. 이때 필요한 함수가 2~3개 정도라면 불편함이 없지만 개수가 훨씬 늘어난다면 함수명을 어떻게 정했었는지 헷갈릴 수도 있다.

 

그런 경우 오버로딩을 통해 함수를 재정의 하여 다양한 자료형에 대해 동일한 기능을 수행하는 함수를 생성하여 다양한 타입의 경우에도 대비하여 프로그램의 코드가 불필요하게 복잡해지는 것을 막을 수 있다. 

 

2. 오버로딩 방법

오버로딩은 함수 매개변수의 개수나 형태를 다르게 하여 재정의 하는 방법이라고 하였다. 다양한 오버로딩의 경우에 대해 확인해 보자.

 

① return type

함수의 반환 타입은 오버로딩에 관여하지 않는다 동일 함수명의 경우에 매개 변수만 관여를 한다.

 

위의 경우 반환 타입이 달라도 매개변수의 개수가 0으로 동일하므로 오버로딩이 되지 않고 에러가 발생하게 된다. 따라서 이 경우는 함수의 이름은 다르게 설정해야 한다.

 

② 매개변수 개수

오버로딩은 매개변수의 타입이 같아도 개수가 다르다면 사용할 수 있다.

 

 

③ 매개변수 타입

매개변수의 타입이 다양한 경우도 가능하다.

 

int형 변수를 가리키는 포인터 변수는 데이터 타입이 int가 아닌 포인터형 변수이므로 매개변수 타입이 다른 것으로 간주된다.

 

④ typedef

 

typedef를 통해 데이터타입 이름을 바꾸어 사용하여도 오버로딩은 가능하지 않다. typedef는 별칭을 만드는 것이지 타입자체가 변경되는 것은 아니기 때문이다. 

 

 

댓글