많은 C++ 프로그램들이 스택(:12), 큐(:12), 리스트(:12)와 같은 일반적인 자료구조를 사용한다. 예컨데, 메시지를 큐로 관리하는 프로그램이 있다고 가정해보자. 이 메시지 큐는 메시지를 원소로 사용하는 다른 프로그램에서도 활용할 수 있을 것이다. 만약 클래스로 만들었다면, 자신의 상황에 맞게 Copy, find, replace 등의 메서드를 구현해서 사용할 수 있을 것이다. 이는 객체지향(:12) 프로그래밍의 재 사용성을 훌륭하게 지원하는 것처럼 보인다.
그러나 자료형이 다를 경우 재 사용성은 물건너 간다. 클래스는 동일한 자료형에 대해서는 훌륭한 재 사용성을 보여주지만, 자료형이 다를 경우에는 그렇지 않다. 만약 클래스를 자료구조로 받는 큐가 필요하다면, 해당 자료구조에 맞게 (많은 부분을)새로 구현해야 할 것이다. 클래스 명이 달라질 수도 있을 것이다. 물론 상속과 다형성 같은 개체지향적 요소 혹은 패턴(:12)을 이용할 수 있지만 제너릭하지 못하다.
템플릿(Template)은 제너릭프로그래밍을 가능하도록 해주는 유용한 도구다. C++의 탬플릿은 자료형이 다를 지라도 이를 최소한의 노력으로 재사용할 수 있도록 도와준다.
T는 자료형을 의미하는데, 어떤 형태라도 사용할 수 있음을 의미한다. 만약 개발자가 int 자료형을 사용한다면 T는 int로 치환될 것이고 이 스택은 int형 자료를 위한 Stack로 사용할 수 있다게된다. 이게 가능한 이유는 컴파일 시간에 자료형을 판단해서 코드를 만들기 때문이다.
설정 값을 읽어오는 클래스를 만든다고 가정해보자. 설정을 가져오는 API는 이미 만들어져 있으며, 이를 호출해서 사용한다고 가정해 보자. 이경우 설정값은 대부분 구조체를 void *로 형변환해서 사용할 거다.
이러한 경우 다음과 같이 클래스를 만들고 이를 상속해서 사용한다면, 범용적으로 사용가능한 설정 클래스를 개발할 수 있을 것이다.
class X<T1, int>에서 int 타입을 특정해서, 템플릿을 운용하고 있다. 음 템플릿 오버로딩이라고 봐도 될 것 같은데. 참고로 컴파일러에 따라서 partial 템플릿을 지원하지 않는 경우도 있을 수 있다. 예를 들어 Visual C++ 5.0은 지원하지 않는다고 한다. 요즘에야 8.0이상을 사용하고 있으니 문제될 것 같진 않지만 확인은 필요할 것 같다.
Contents
1. C++ 템플릿
2. 클래스 탬플릿
2.1. 클래스 탬플릿 만들기
2.2. 클래스 탬플릿 사용
2.3. 설정 클래스
2.4. 클래스 탬플릿 Specialization
2.5. 템플릿 클래스 Partial Specialization
3. 템플릿 함수
4. 관련글
1. C++ 템플릿
2. 클래스 탬플릿
2.1. 클래스 탬플릿 만들기
2.2. 클래스 탬플릿 사용
2.3. 설정 클래스
2.4. 클래스 탬플릿 Specialization
2.5. 템플릿 클래스 Partial Specialization
3. 템플릿 함수
4. 관련글
Recent Posts
Archive Posts
Tags