C++ 템플릿은 제네릭 프로그래밍을 지원하기 위한 강력한 기능 중 하나입니다.
템플릿을 사용하면 함수나 클래스를 일반화하여 여러 자료형에서 동작하도록 만들 수 있습니다.
이를 통해 코드의 재사용성을 높이고 유연성을 확보할 수 있습니다.
함수 템플릿(Function Templates)
함수 템플릿은 특정한 자료형에 의존하지 않고, 여러 자료형에서 동작할 수 있는 함수를 생성합니다.
다음은 함수 템플릿의 간단한 예제입니다.
template<typename T>
T add(T a, T b) {
return a + b;
}
위의 코드에서 'add()' 함수는 템플릿으로 선언되었으며, 자료형 'T'를 사용하여 두 개의 매개변수를 더합니다.
int main() {
std::cout << add(5, 3) << std::endl; // 출력: 8
std::cout << add(3.5, 2.7) << std::endl; // 출력: 6.2
return 0;
}
위의 예제에서 'add()' 함수가 'int'와 'double' 자료형에서 각각 호출되는 것을 볼 수 있습니다.
클래스 템플릿(Class Templates)
클래스 템플릿은 특정한 자료형에 의존하지 않고 여러 자료형에 대해 동작하는 클래스를 정의합니다.
다음은 클래스 템플릿의 간단한 예제입니다.
template<typename T>
class Pair {
private:
T first;
T second;
public:
Pair(T a, T b) : first(a), second(b) {}
T getFirst() const { return first; }
T getSecond() const { return second; }
};
위의 코드에서 'Pair' 클래스는 두 개의 요소를 가지는 쌍(pair)을 표현합니다.
클래스 내부에서 'T' 자료형을 사용하여 요소의 자료형을 지정합니다.
int main() {
Pair<int> intPair(5, 10);
Pair<double> doublePair(3.14, 2.71);
std::cout << "Integer pair: " << intPair.getFirst() << ", " << intPair.getSecond() << std::endl;
std::cout << "Double pair: " << doublePair.getFirst() << ", " << doublePair.getSecond() << std::endl;
return 0;
}
위의 예제에서는 'Pair' 클래스가 'int'와 'double' 자료형으로 사용되는 것을 보여줍니다.
템플릿 특수화(Template Specialization)
템플릿 특수화는 특정 자료형에 대해 템플릿을 재정의하는 기능을 제공합니다.
특수화된 템플릿은 특정 자료형에 대해 일반적인 템플릿보다 더 구체적인 동작을 수행할 수 있습니다.
template<>
class Pair<std::string> {
private:
std::string first;
std::string second;
public:
Pair(std::string a, std::string b) : first(a), second(b) {}
std::string getFirst() const { return first; }
std::string getSecond() const { return second; }
};
위의 코드에서 'Pair' 클래스를 'std::string' 자료형에 대해 특수화하였습니다.
int main() {
Pair<std::string> stringPair("Hello", "World");
std::cout << "String pair: " << stringPair.getFirst() << ", " << stringPair.getSecond() << std::endl;
return 0;
}
위의 예제에서는 'Pair' 클래스가 'std::string' 자료형으로 특수화된 것을 보여줍니다.
마무리
C++ 템플릿은 제네릭 프로그래밍을 지원하여 유연하고 재사용 가능한 코드를 작성하는 데 매우 유용합니다.
함수 템플릿과 클래스 템플릿을 사용하여 일반화된 코드를 작성할 수 있으며,
템플릿 특수화를 통해 특정 자료형에 대해 세부적인 동작을 정의할 수 있습니다.
제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀
'Application > 기초' 카테고리의 다른 글
| [기초] C++ 동기화 기법 (Mutex와 Semaphore) (0) | 2024.04.30 |
|---|---|
| [기초] C++ 멀티스레딩 (Thread) (0) | 2024.04.29 |
| [기초] C++ 가변 파라미터 (2) | 2024.04.27 |
| [기초] C++ 디폴트 파라미터 (Default Parameters) (0) | 2024.04.26 |
| [기초] C++ 메모리 패킹 (pragma pack) (0) | 2024.04.25 |