-
[C++] 템플릿프로그래밍/C & C++ 2024. 7. 5. 20:05728x90반응형
템플릿은 C++에서 코드를 작성할 때 타입을 일반화하여 재사용성을 높이는 강력한 기능입니다. 템플릿을 사용하면 하나의 함수나 클래스 정의를 통해 다양한 타입을 지원할 수 있습니다. 템플릿은 함수 템플릿과 클래스 템플릿 두 가지 주요 형태로 사용됩니다.
1. 함수 템플릿 (Function Template)
함수 템플릿은 여러 타입을 처리할 수 있는 일반적인 함수를 정의할 때 사용됩니다. 함수 템플릿을 사용하면 타입에 독립적인 코드를 작성할 수 있습니다.
함수 템플릿 예시
#include <iostream> // 함수 템플릿 정의 template <typename T> T add(T a, T b) { return a + b; } int main() { std::cout << "Int addition: " << add(3, 4) << std::endl; // int 타입 std::cout << "Double addition: " << add(3.14, 2.71) << std::endl; // double 타입 return 0; }
위 예제에서
add
함수 템플릿은T
타입을 매개변수로 받아,int
,double
등 다양한 타입에 대해 동작합니다.2. 클래스 템플릿 (Class Template)
클래스 템플릿은 특정 타입에 구애받지 않는 일반적인 클래스를 정의할 때 사용됩니다. 이를 통해 하나의 클래스 정의로 다양한 타입의 객체를 생성할 수 있습니다.
클래스 템플릿 예시
#include <iostream> template <typename T> class MyClass { public: MyClass(T value) : value(value) {} void display() const { std::cout << "Value: " << value << std::endl; } private: T value; }; int main() { MyClass<int> intObj(42); // int 타입의 MyClass 객체 MyClass<double> doubleObj(3.14); // double 타입의 MyClass 객체 intObj.display(); doubleObj.display(); return 0; }
위 예제에서
MyClass
클래스 템플릿은T
타입을 매개변수로 받아,int
,double
등 다양한 타입의 객체를 생성할 수 있습니다.3. 템플릿 특수화 (Template Specialization)
템플릿 특수화는 특정 타입에 대해 템플릿을 별도로 정의하는 것입니다. 이를 통해 특정 타입에 대해 최적화된 동작을 구현할 수 있습니다.
템플릿 특수화 예시
#include <iostream> template <typename T> class MyClass { public: MyClass(T value) : value(value) {} void display() const { std::cout << "Value: " << value << std::endl; } private: T value; }; // int 타입에 대한 특수화 template <> class MyClass<int> { public: MyClass(int value) : value(value) {} void display() const { std::cout << "Integer Value: " << value << std::endl; } private: int value; }; int main() { MyClass<int> intObj(42); // int 타입의 특수화된 MyClass 객체 MyClass<double> doubleObj(3.14); // double 타입의 일반 MyClass 객체 intObj.display(); doubleObj.display(); return 0; }
위 예제에서
MyClass<int>
는int
타입에 대해 특수화되어, 일반 템플릿과는 다른 동작을 수행합니다.4. 템플릿의 장점
- 재사용성: 한 번의 정의로 다양한 타입에 대해 재사용할 수 있습니다.
- 유연성: 타입에 독립적인 코드를 작성할 수 있습니다.
- 유지보수성: 코드의 중복을 줄여 유지보수를 쉽게 합니다.
5. 템플릿의 제한 사항
- 컴파일 시간 증가: 템플릿은 컴파일 시점에 인스턴스화되므로, 컴파일 시간이 증가할 수 있습니다.
- 디버깅 어려움: 템플릿 코드에서 발생하는 컴파일 오류는 이해하고 수정하기 어려울 수 있습니다.
- 코드 크기 증가: 여러 타입에 대해 인스턴스화될 때 코드 크기가 증가할 수 있습니다.
요약
템플릿은 C++에서 타입에 독립적인 코드를 작성할 수 있게 해주는 강력한 기능입니다. 함수 템플릿과 클래스 템플릿을 사용하면 다양한 타입에 대해 동일한 코드로 작업할 수 있으며, 특수화를 통해 특정 타입에 대해 최적화된 동작을 구현할 수 있습니다. 이를 통해 코드의 재사용성과 유연성을 크게 향상시킬 수 있습니다.
728x90반응형'프로그래밍 > C & C++' 카테고리의 다른 글
[C++] STL 종류 (0) 2024.07.06 [C++] 제네릭 프로그래밍 (0) 2024.07.05 [C++] 이동 의미론(Move Semantics) (0) 2024.07.05 [C++] 깊은 복사와 얕은 복사 (0) 2024.07.05 [C++] 참조자를 통해 객체의 멤버에 접근 (0) 2024.07.02