템플릿 Template

Gogi·2023년 6월 9일

C++언어 기초 목록

목록 보기
15/15

다른 자료형에서도 동일한 동작

템플릿은 코드를 일반화하여 여러 데이터 유형에 대해 동일한 동작을 수행할 수 있도록 해준다. 템플릿을 활용하여 코드의 재사용성과 유연성을 높일 수 있으며, 일반화(Generalization)와, 특수화(Specialization)기능을 통해 컴파일 시간에 하나의 코드 베이스에서 여러 자료형에 대해 동작하는 코드를 만들 수 있다.


개념 설명 및 사용 예시

- 템플릿 기본 형태

template <typename T> 
// 템플릿 키워드, 템플릿 매개변수
T AddFunc(T num1, T num2); 
// 자료형 자리에 템플릿 매개변수를 작성
template <class T> 
// 클래스에는 <class T>로 표기하는 것도 가능
class MyTemplateClass 
{
	// 선언, 정의
};

T자리에 다른 알파뱃 문자를 넣을 수 있고 <class T> 대신 <typename T>를 사용해도 된다.

- 함수 템플릿

함수 템플릿은 작업 유형이 같거나 비슷하지만 자료형만 다른 경우에 유용하다. 가령, 두 개의 정수 또는 두 개의 실수를 비교하는 함수를 각각 만드는 대신, 템플릿을 통해 일반화하여 여러 자료형에서도 동일한 작업을 수행하는 함수를 만들어낼 수 있다.

#include <iostream>
using namespace std;

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

int main() 
{
    int sum1 = Add(3, 5); 
    // Add<int>(3, 5);       
    
    double sum2 = Add(2.5, 4.7); 
    // Add<double>(2.5, 4.7);

    cout << "Sum 1: " << sum1 << endl;
    cout << "Sum 2: " << sum2 << endl;

    return 0;
}

- 클래스 템플릿

기능은 비슷하지만 사용되는 자료형이 다른 경우에 사용할 수 있다. 템플릿 매개변수를 사용하여 클래스의 멤버 변수, 멤버 함수, 자료형 등을 정의 가능하다.

template <typename T>
class MyArray 
{
private:
    T array[100];
    int size;
public:
    MyArray() : size(0) 
    {
    }
    void push(T value) 
    { 
        array[size] = value;
        size++;
    }   
};

용어 설명

- 일반화 (Generalization)

코드를 일반적인 형태로 작성하여 다양한 자료형에서 같은 동작을 수행하도록 만든다.

- 특수화 (Specialization)

일반화 작업 중 일반화가 불가능한 특정 자료형에 대해 재정의하는 것을 말한다. 가령, 정수를 더하는 함수를 일반화해도 문자열 자료형이나 사용자 정의 자료형 등에는 별도의 동작을 정의해야 된다. 이를 특정 자료형을 특수화 한다고 표현한다.


업데이트

. . .

profile
C, C++, C#, Unity

0개의 댓글