Nagie's DevStory

[CPP] 34. 템플릿 (Template) 본문

Programming/C++

[CPP] 34. 템플릿 (Template)

Nagie 2023. 10. 22. 22:00
728x90

앞서 함수 템플릿에 대해 글을 작성한 적이 있지만 모든 템플릿 문법을 설명한 게 아니라 추가적인 포스팅을 하게 됐다.

C++에서 사용하는 템플릿 문법은 총 3가지가 있으며 가장 많이 사용하는 문법은 함수 템플릿과 클래스 템플릿이다.

C++14부터 추가된 변수 템플릿이라는 문법도 있긴 하지만 많이 사용하는 걸 못봤다.

그럼, 함수 템플릿부터 설명하겠다.

 

 

1. 함수 템플릿 (Function Template)

 

함수 템플릿은 함수의 틀을 만드는 데 사용된다.

템플릿을 사용하면 다양한 데이터 형식에 대해 동일한 함수 로직을 사용할 수 있으며

함수 템플릿은 일반 함수처럼 정의되지만 데이터 형식을 템플릿 파라미터로 사용한다.

다음은 함수 템플릿의 사용 예시이다.

 

template <typename T>
T add(T a, T b) {

    return a + b;
}

int main() {

    int sum_int = add(5, 10);
    double sum_double = add(3.5, 2.7);
}

 

 

2. 클래스 템플릿 (Class Template)

 

클래스 템플릿은 클래스의 틀을 만드는 데 사용된다.

클래스 템플릿을 정의하면 다양한 데이터 형식 또는 클래스 형식을 사용해 객체를 생성할 수 있으며

주로 컨테이너 클래스(STL)나 제너릭 데이터 구조를 작성할 때 사용된다.

다음은 클래스 템플릿으로 간단하게 구현해 본 벡터의 예시다.

 

template <typename T>
class MyVector {

private:

    T* data;
    int size;
    
public:

    MyVector(int s) : size(s) {
    
        data = new T[s];
    }

    T& operator[](int index) {
    
        return data[index];
    }
};

int main() {

    MyVector<int> intVector(5);
    MyVector<double> doubleVector(10);
    // ...
}

 

 

3. 변수 템플릿

 

C++ 14에서 도입된 변수 템플릿(Variable Template)은 템플릿을 사용해 변수를 정의하고 초기화하는 기능을 제공한다.

변수 템플릿은 함수 템플릿 및 클래스 템플릿과 비슷한 문법을 사용하며

특정 데이터 형식 또는 값에 대한 템플릿화된 변수를 생성할 수 있다.

다음은 변수 템플릿의 사용 예시이다.

 

template <typename T>
constexpr T pi = T(3.14159265358979323846);

int main() {

    double radius = 5.0;
    double area = pi<double> * radius * radius; // 변수 템플릿을 사용하여 pi를 특정 데이터 형식으로 인스턴스화
}

 

이로써 템플릿은 코드의 재사용성을 올림과 동시에, 제너릭 프로그래밍을 가능하게 하며

다양한 데이터 형식과 클래스에 대해 일반적인 알고리즘 및 데이터 구조를 작성하는 데 도움을 준다.

728x90
Comments