Nagie's DevStory
[CPP] 34. 템플릿 (Template) 본문
앞서 함수 템플릿에 대해 글을 작성한 적이 있지만 모든 템플릿 문법을 설명한 게 아니라 추가적인 포스팅을 하게 됐다.
C++에서 사용하는 템플릿 문법은 총 3가지가 있으며 가장 많이 사용하는 문법은 함수 템플릿과 클래스 템플릿이다.
C++14부터 추가된 변수 템플릿이라는 문법도 있긴 하지만 많이 사용하는 걸 못봤다.
그럼, 함수 템플릿부터 설명하겠다.
1. 함수 템플릿 (Function Template)
함수 템플릿은 함수의 틀을 만드는 데 사용된다.
템플릿을 사용하면 다양한 데이터 형식에 대해 동일한 함수 로직을 사용할 수 있으며
함수 템플릿은 일반 함수처럼 정의되지만 데이터 형식을 템플릿 파라미터로 사용한다.
다음은 함수 템플릿의 사용 예시이다.
template <typename T>
T add(T a, T b) {
return a + b;
}
int main() {
int sum_int = add(5, 10);
double sum_double = add(3.5, 2.7);
}
2. 클래스 템플릿 (Class Template)
클래스 템플릿은 클래스의 틀을 만드는 데 사용된다.
클래스 템플릿을 정의하면 다양한 데이터 형식 또는 클래스 형식을 사용해 객체를 생성할 수 있으며
주로 컨테이너 클래스(STL)나 제너릭 데이터 구조를 작성할 때 사용된다.
다음은 클래스 템플릿으로 간단하게 구현해 본 벡터의 예시다.
template <typename T>
class MyVector {
private:
T* data;
int size;
public:
MyVector(int s) : size(s) {
data = new T[s];
}
T& operator[](int index) {
return data[index];
}
};
int main() {
MyVector<int> intVector(5);
MyVector<double> doubleVector(10);
// ...
}
3. 변수 템플릿
C++ 14에서 도입된 변수 템플릿(Variable Template)은 템플릿을 사용해 변수를 정의하고 초기화하는 기능을 제공한다.
변수 템플릿은 함수 템플릿 및 클래스 템플릿과 비슷한 문법을 사용하며
특정 데이터 형식 또는 값에 대한 템플릿화된 변수를 생성할 수 있다.
다음은 변수 템플릿의 사용 예시이다.
template <typename T>
constexpr T pi = T(3.14159265358979323846);
int main() {
double radius = 5.0;
double area = pi<double> * radius * radius; // 변수 템플릿을 사용하여 pi를 특정 데이터 형식으로 인스턴스화
}
이로써 템플릿은 코드의 재사용성을 올림과 동시에, 제너릭 프로그래밍을 가능하게 하며
다양한 데이터 형식과 클래스에 대해 일반적인 알고리즘 및 데이터 구조를 작성하는 데 도움을 준다.