학습 내용

C++에서 템플릿(Template)은 함수나 클래스를 일반화하여 다양한 데이터 타입을 처리할 수 있도록 하는 기능입니다. 이를 통해 중복된 코드를 줄이고 코드의 재사용성을 극대화할 수 있습니다. 함수 템플릿클래스 템플릿은 템플릿의 대표적인 두 가지 형태입니다.

템플릿의 기본 개념

템플릿은 코드 작성 시 데이터 타입을 미리 지정하지 않고 매개변수로 받아 나중에 지정합니다. 이를 통해 다양한 타입에 대해 동일한 작업을 수행할 수 있습니다.

template <typename T>

함수 템플릿

함수 템플릿은 다양한 데이터 타입을 처리할 수 있는 일반화된 함수를 정의하는 방법입니다. 예를 들어, 두 값을 비교하는 함수를 템플릿으로 작성하면 int, double, char 등 다양한 타입을 지원할 수 있습니다.

template <typename T>
T getMax(T a, T b) {
    return (a > b) ? a : b;
}

// int형 값을 비교
cout << "Max of 10 and 20: " << getMax(10, 20) << endl;  // 20

// double형 값을 비교
cout << "Max of 10.5 and 20.5: " << getMax(10.5, 20.5) << endl;  // 20.5

// char형 값을 비교
cout << "Max of 'a' and 'z': " << getMax('a', 'z') << endl;  // z

위 예제에서 getMax()템플릿 함수로 작성되어 다양한 데이터 타입에 대해 동일한 비교 작업을 수행할 수 있습니다. 이로써 코드의 중복을 줄이고 타입에 관계없이 유연하게 동작합니다.

클래스 템플릿

클래스 템플릿은 다양한 데이터 타입을 처리할 수 있는 일반화된 클래스를 정의합니다. 이는 스택, 리스트와 같은 자료구조에서 주로 사용됩니다.

template <typename T>
class Box {
private:
    T value;

public:
    // 생성자
    Box(T v) : value(v) {}

    // 값 출력 메소드
    void display() {
        cout << "Value: " << value << endl;
    }

    // 값 반환 메소드
    T getValue() {
        return value;
    }
};

// int형 값을 저장하는 Box 객체
Box<int> intBox(100);
intBox.display();  // 출력: Value: 100

// double형 값을 저장하는 Box 객체
Box<double> doubleBox(99.99);
doubleBox.display();  // 출력: Value: 99.99

// string형 값을 저장하는 Box 객체
Box<string> stringBox("Hello, Templates!");
stringBox.display();  // 출력: Value: Hello, Templates!

Box 클래스는 템플릿으로 정의되어 다양한 데이터 타입에 대해 동작할 수 있습니다. 예를 들어, Box<int>, Box<double>, Box<string>과 같이 템플릿 클래스를 인스턴스화할 때 데이터 타입을 지정합니다. 이로써 데이터 타입에 관계없이 동일한 로직을 사용할 수 있습니다.

템플릿의 장점

정리