C++
[C++] 템플릿 매개변수(template parameter)
코딩 메모장
2024. 11. 14. 21:11
728x90
C++에서 템플릿 매개변수는 함수나 클래스 템플릿 정의에서 사용하는 매개변수입니다. 이를 통해 데이터 타입이나 값 등을 일반화하여 다양한 타입에 대해 재사용 가능한 코드를 작성할 수 있습니다.
기본 개념
함수 템플릿:
- 함수 템플릿을 사용하면 여러 데이터 타입에 대해 동일한 함수를 정의할 수 있습니다. 아래 예제에서는 두 값을 비교하는 함수를 정의합니다.
#include <iostream>
template <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
int main() {
std::cout << max(10, 20) << std::endl; // int
std::cout << max(10.5, 20.5) << std::endl; // double
std::cout << max('A', 'B') << std::endl; // char
return 0;
}
클래스 템플릿:
- 클래스 템플릿을 사용하면 데이터 타입을 일반화하여 다양한 타입의 객체를 생성할 수 있습니다.
#include <iostream>
#include <string>
template <typename T>
class Box {
private:
T item;
public:
Box(T item) : item(item) {}
T getItem() { return item; }
};
int main() {
Box<int> intBox(123);
Box<std::string> strBox("Hello");
std::cout << intBox.getItem() << std::endl; // 123
std::cout << strBox.getItem() << std::endl; // Hello
return 0;
}
템플릿 매개변수의 종류
타입 매개변수:
- typename 또는 class 키워드를 사용해 데이터 타입을 매개변수로 지정합니다. 이로써 다양한 타입을 지원하는 일반화된 코드를 작성할 수 있습니다.
비타입(non-type) 매개변수:
- 정수, 포인터, 열거형 등의 값을 매개변수로 사용할 수 있습니다. 예를 들어, 배열 크기를 템플릿 매개변수로 지정할 수 있습니다.
template <typename T, int size>
class Array {
private:
T arr[size];
public:
int getSize() { return size; }
};
템플릿 템플릿 매개변수:
- 템플릿을 매개변수로 받는 고급 템플릿 기능입니다. 예를 들어, 컨테이너 템플릿 내부에 다른 템플릿을 사용할 때 유용합니다.
장점
- 재사용성:
- 동일한 로직을 다양한 데이터 타입에 대해 재사용할 수 있어 코드 중복을 줄입니다.
- 유연성:
- 코드 작성 시 데이터 타입을 동적으로 결정할 수 있어 유연성이 증가합니다.
- 타입 안전성:
- 템플릿 매개변수는 컴파일 타임에 타입 검사가 이루어지므로 런타임 오류를 줄일 수 있습니다.
- 컴파일 타임 최적화:
- 특히 상수 비타입 매개변수는 컴파일 시 최적화에 활용되어 성능이 개선됩니다.
주의사항
템플릿은 인스턴스화될 때마다 새로운 코드가 생성되어 프로그램의 코드 크기(bloat)가 증가할 수 있습니다. 따라서 템플릿을 사용할 때는 코드의 부피 증가를 고려하여 필요한 부분에만 적용하는 것이 좋습니다.
결론
템플릿 매개변수는 C++의 강력한 기능 중 하나로, 타입과 데이터를 일반화하여 코드 재사용성과 유연성을 높이는 데 큰 역할을 합니다. 이를 통해 다양한 데이터 타입에 대해 효율적인 코드를 작성할 수 있으며, 성능 최적화와 타입 안정성의 장점도 제공합니다.
728x90