C++ 템플릿

눈토끼·2024년 7월 19일

템플릿

템플릿의 필요성

템플릿은 C++에서 코드의 재사용성을 높이고, 다양한 데이터 타입에 대해 유연하게 동작할 수 있게 해준다. 특히, 동일한 알고리즘을 다양한 타입에 적용할 때 유용하다.

템플릿의 사용 이유

템플릿을 사용하면 코드의 중복을 줄이고, 타입에 독립적인 코드를 작성할 수 있다. 이를 통해 유지보수성이 향상되고, 코드의 가독성도 높아진다.


함수 템플릿 (Function Template)

함수 템플릿의 이해

함수 템플릿은 데이터 타입에 상관없이 하나의 함수 정의로 여러 타입에 대해 작업을 수행할 수 있게 한다.

함수 템플릿의 형태

함수 템플릿은 template<typename T> 혹은 template<class T>로 시작하며, T는 임의의 타입을 의미한다.

함수 템플릿의 예시

template<typename T>
T add(T a, T b) {
    return a + b;
}

함수 템플릿의 특수화

특정 타입에 대해 일반 템플릿과 다르게 동작하도록 특수화할 수 있다.

template<>
int add(int a, int b) {
    // int 타입에 대한 특수한 구현
    return a + b + 10;
}

클래스 템플릿 (Class Template)

클래스 템플릿의 이해

클래스 템플릿은 데이터 타입에 상관없이 동일한 클래스 정의를 다양한 타입에 대해 사용할 수 있게 한다.

클래스 템플릿의 예시

template<typename T>
class Container {
    T element;
public:
    Container(T arg) : element(arg) {}
    T getElement() { return element; }
};

클래스 템플릿의 특수화

특정 타입에 대해 클래스 템플릿을 특수화할 수 다.

template<>
class Container<int> {
    int element;
public:
    Container(int arg) : element(arg) {}
    int getElement() { return element * 2; }
}

클래스 템플릿의 부분 특수화

특정 조건을 만족하는 타입에 대해 부분적으로 특수화할 수 있다.

template<typename T>
class Container<T*> {
    T* element;
public:
    Container(T* arg) : element(arg) {}
    T* getElement() { return element; }
}

템플릿 인자 (Template Parameters)

템플릿에서의 매개 변수와 인자

템플릿은 타입뿐만 아니라, 값, 포인터, 참조 등을 매개변수로 받을 수 있다.

템플릿 매개변수에서의 변수 선언 예제

template<typename T, int size>
class Array {
    T arr[size];
public:
    T& operator[](int index) { return arr[index]; }
}

템플릿 매개변수의 디폴트 값 지정

템플릿 매개변수에 디폴트 값을 지정할 수 있다.

template<typename T = int>
class DefaultContainer {
    T element;
public:
    DefaultContainer(T arg = 0) : element(arg) {}
    T getElement() { return element; }
}

이와 같은 방식으로 템플릿을 활용하면, 다양한 데이터 타입에 대해 유연하고 재사용 가능한 코드를 작성할 수 있다.

profile
노력중

0개의 댓글