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; }
};

템플릿 템플릿 매개변수:

  • 템플릿을 매개변수로 받는 고급 템플릿 기능입니다. 예를 들어, 컨테이너 템플릿 내부에 다른 템플릿을 사용할 때 유용합니다.

장점

  1. 재사용성:
    • 동일한 로직을 다양한 데이터 타입에 대해 재사용할 수 있어 코드 중복을 줄입니다.
  2. 유연성:
    • 코드 작성 시 데이터 타입을 동적으로 결정할 수 있어 유연성이 증가합니다.
  3. 타입 안전성:
    • 템플릿 매개변수는 컴파일 타임에 타입 검사가 이루어지므로 런타임 오류를 줄일 수 있습니다.
  4. 컴파일 타임 최적화:
    • 특히 상수 비타입 매개변수는 컴파일 시 최적화에 활용되어 성능이 개선됩니다.

주의사항

템플릿은 인스턴스화될 때마다 새로운 코드가 생성되어 프로그램의 코드 크기(bloat)가 증가할 수 있습니다. 따라서 템플릿을 사용할 때는 코드의 부피 증가를 고려하여 필요한 부분에만 적용하는 것이 좋습니다.

결론

템플릿 매개변수는 C++의 강력한 기능 중 하나로, 타입과 데이터를 일반화하여 코드 재사용성과 유연성을 높이는 데 큰 역할을 합니다. 이를 통해 다양한 데이터 타입에 대해 효율적인 코드를 작성할 수 있으며, 성능 최적화와 타입 안정성의 장점도 제공합니다.

728x90