본문 바로가기

전자 공학/C언어 C++

[C++ 독학하기] 7. 함수 다중 정의, 오버로딩 개념

반응형

안녕하세요. 취업한 공대누나입니다.

오늘은 C++의 또다른 특징 중 하나인 오버로딩 개념에 대해서 알아보도록 하겠습니다.

헷갈릴수도 있지만 천천히 보시면 어려운 개념이 아닌 것을 알게 되실 겁니다.

시작하겠습니다.


1. 오버로딩(Overloading)이란?

함수 다중 정의라고도 말합니다. 이름 그대로 나타나 있듯이 여러 의미를 동시에 갖는 것을 말합니다.

C에서는 이름이 같은 함수가 존재할 수 없었는데요.

C++에서는 매개변수의 갯수가 달라지거나 하면 이름이 같아도 다른 함수로 인식이 됩니다. 

이것을 C++는 함수의 다형성을 지원한다고도 말합니다.

예제를 통해 보도록 하겠습니다.

 


2. 예제 소스코드

저는 왼쪽과 같이 Add_test라는 함수를 세 가지 형태로 다중 정의를 해보았습니다.

가장 위쪽의 Add_test는 매개변수가 1개로 입력 받은 값을 두 배 시켜주는 함수입니다.

두 번째 Add_test는 입력받은 매개변수 2개를 더해주고, 세번째 Add_test는 입력받은 매개변수 3개를 더해줍니다.

오른쪽에 출력되는 것을 보시면 오류 없이 잘 동작하는 것을 볼 수 있는데요.

이와 같이 한 가지 개념에 대해서 여러 가지 형태로 구현할 수 있습니다.

 

저는 위에서 매개변수의 갯수를 다르게 하는 코드를 보여드렸습니다.

하지만 매개변수의 개수는 같은 상태에서 자료형만 다르게 하는 것 또한 오버로딩이라고 할 수 있는데요.

예를 들어서 int Add_test(double a, double b)라고 하는 경우도 다르게 인식하는 것입니다.


3. 함수 템플릿

템플릿은 일종의 '틀'의 개념과 같습니다.

마치 판화의 틀을 만들어 여러 장의 판화를 인쇄하는 것과 같은 개념인데요.

함수나 클래스를 다시 작성하지 않아도 여러 자료형으로 사용할 수 있도록 만들어 놓은 것을 말합니다.

한 번 예제를 보도록 하겠습니다.

 

사용하는 방법은 왼쪽을 참고해주시면 됩니다.

이 때 T는 자료형입니다. 자료형을 모호하게 T라고 둔 것을 볼 수 있습니다.

함수를 호출하는 부분에서 1.1과 2.2를 각각 입력하니 3.3이 출력되었고

2와 3을 입력하니 5가 출력된 것을 확인할 수 있습니다.

즉 호출할 때 어떤 값으로 호출하느냐에 따라 자동으로 다중 정의가 이루어지는 것을 확인할 수 있습니다.

컴파일러가 알아서 해주는 것입니다.


오버로딩의 경우 사용할 때 편리할 수도 있지만 실제로는 그렇게 효율적이지 않을 수도 있습니다.

같은 코드를 여러 번 반복하는 꼴이 될 수도 있기 때문입니다.

따라서 효율적으로 코드 짜시는 것을 목표로 하시는 분들은 템플릿을 이용해보셔도 좋으며 적절한 상황에서 사용해야 하는 것을 유의해주세요.

감사합니다.

반응형