C++의 템플릿(Template)은 데이터 타입에 제한되지 않고 일반화된 코드를 작성할 수 있게 해주는 효율적인 도구이다.
제네릭 프로그래밍의 핵심이자 C++의 재사용성을 뒷받침하는 템플릿의 개념을 정리했다.
타입의 경계를 넘는 템플릿
템플릿을 사용하면 하나의 코드로 여러 타입을 처리할 수 있다.
- 함수 템플릿:
int,double, 사용자 정의 클래스 등 로직이 같다면 하나의 함수로 대응 가능하다. -
클래스 템플릿: 타입을 파라미터로 받는 클래스를 생성한다.
std::vector<T>가 대표적인 예이다. -
템플릿 특수화: 보편적인 로직이 특정 타입(예:
char*나bool)에서 다르게 동작해야 할 때 해당 타입만을 위한 처리를 정의할 수 있다.
성능과 범용성
템플릿은 컴파일 시점에 해당 타입에 맞는 코드가 생성된다.
런타임에 타입을 체크하는 비용이 없어 성능 손실 없이 범용적인 코드를 작성할 수 있다.
다만 컴파일 시간이 길어지거나 바이너리 크기가 커질 수 있다는 점을 고려해야 한다.
STL의 구조
STL(Standard Template Library)이 강력한 이유는 템플릿에 기반하기 때문이다.
타입 안정성을 유지하면서 코드의 재사용성을 극대화하는 템플릿은 현대 C++ 개발의 필수 요소인 것 같다.