본문 바로가기

C++ 기초 1

[C++] 5-4 템플릿 함수 (Template function)

템플릿

   프로그래밍을 하다 보면 매개변수와 return값의 데이터형이 다를 뿐, 함수의 내부 구조가 동일한 함수들을 사용해야 되는 경우가 발생한다. 이때에는 데이터형 별로 여러 개의 함수를 작성해야 하는 번거로움이 발생한다. 

   C++에서 제공하는 오버로드 기능을 이용하면 서로 다른 유형의 데이터를 사용해서 비슷한 작업을 수행하는 함수들을 동일한 이름으로 정의할 수 있지만, 서로 다른 return값을 돌려주는 경우에는 함수 명을 별개의 이름으로 작성해야 한다. 

   C++에서 이러한 문제를 해결하기 위해서 템플릿(template)기능을 제공한다. 템플릿 기능으로 return 값의 다양한 데이터형을 설정할 수 있으므로 편리하게 함수를 작성하고 관리할 수 있다.

   템플릿은 함수와 클래스에 적용할 수 있다. 각각 템플릿 함수, 템플릿 클래스라고 불린다. 이들은 예약어 template를 사용하여 작성되며 처리하는 데이터형을 매개변수로 지정한다. 이번 포스팅에서 템플릿 함수에 대해 설명하고, 다음 포스팅에 템플릿 클래스를 설명하고자 한다.

 

템플릿 함수

   템플릿 함수는 예약어 templete를 활용해서 선언할 수 있다. 예제에 template <class T> 대신에 template <typename T>로 작성해도 된다. 즉, class 대신에 typename으로 템플릿의 데이터형을 선언할 수 있다. 이처럼 템플릿을 활용해서 다양한 데이터형으로 다시 사용할 수 있는 범용 함수를 생성할 수 있다. 

 

예제
#include <iostream>
using namespace std;
template <class T>	//템플릿 범용 데이터형 T  선언
T sub(T a, T b)	//템플릿 함수의 정의
{
	if (a > b) return a;
	else return b;
}

int main()
{
	int x = 10, y = 100;
	double m = 10.5, n = 20.6;
	cout << "max= " << sub(x, y) << endl;
	cout << "max= " << sub(m, n) << endl;
	return 0;
}
실행 결과
max= 100
max= 20.6
  • 템플릿 함수 sub()의 함수형을 템플릿에서 선언한 범용 데이터형 T로 지정할 수 있다. 
 
참고

1. 장인성 외 5인, (초보자도 쉽게 따라 할 수 있는) C++프로그래밍, 광문각, 2017.02.13