Application/기초

[기초] C++ 템플릿 (Templates)

devsalix 2024. 4. 28. 09:20
728x90

 

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++ 템플릿은 제네릭 프로그래밍을 지원하여 유연하고 재사용 가능한 코드를 작성하는 데 매우 유용합니다.

함수 템플릿과 클래스 템플릿을 사용하여 일반화된 코드를 작성할 수 있으며,

템플릿 특수화를 통해 특정 자료형에 대해 세부적인 동작을 정의할 수 있습니다.

 

 


제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀

 

 
728x90
반응형