이 글에서는 C++의 템플릿 특수화(Template Specialization) 개념을 예제 프로그램과 함께 자세히 살펴보겠습니다.
C++에서 sort()와 같은 표준 함수는 어떤 데이터 타입에도 사용할 수 있으며, 각 타입에 대해 동일하게 동작합니다. 하지만 특정 데이터 타입(사용자가 정의한 타입 포함)에 대해서만 함수가 다르게 동작하도록 만들고 싶다면, 바로 템플릿 특수화를 활용하면 됩니다.
템플릿 특수화란?
템플릿 특수화는 일반 템플릿이 모든 타입에 대해 동일한 로직으로 동작하는 것과 달리, 특정 타입에 한해서 별도의 구현을 제공하는 기능입니다. 컴파일러는 호출 시 전달된 인자의 타입을 확인하고, 해당 타입에 대한 특수화 버전이 존재하면 그것을 우선적으로 사용합니다.
예제 코드
#include <iostream>
using namespace std;
template <class T>
void fun(T a) {
cout << "The main template fun(): " << a << endl;
}
template<>
void fun(int a) {
cout << "Specialized Template for int type: " << a << endl;
}
int main(){
fun<char>('a');
fun<int>(10);
fun<float>(10.14);
return 0;
}실행 결과
The main template fun(): a Specialized Template for int type: 10 The main template fun(): 10.14
코드 설명
위 예제를 단계별로 분석해 보겠습니다.
- 일반 템플릿 함수: 첫 번째
fun()은template <class T>로 선언된 범용 템플릿입니다.char,float처럼 특수화되지 않은 타입이 전달되면 이 버전이 호출됩니다. - 특수화된 템플릿 함수: 두 번째
fun()은template<>문법으로 선언된int타입 전용 특수화 버전입니다.int인자가 전달되면 일반 템플릿 대신 이 함수가 실행됩니다. - 호출 결과:
fun<char>('a')와fun<float>(10.14)는 일반 템플릿을 사용하지만,fun<int>(10)은 특수화된 버전을 사용하는 것을 출력 결과에서 확인할 수 있습니다.
정리
템플릿 특수화는 범용성을 유지하면서도 특정 타입에 최적화된 동작이 필요할 때 매우 유용한 C++ 기능입니다. 성능 최적화나 타입별 예외 처리가 필요한 경우 적극적으로 활용해 보시기 바랍니다.