C++ < Template(템플릿) >

2026. 3. 10. 12:49TIL

템플릿(Template)은 타입에 관계 없이 동일한 기능을 수행하는 코드를 일반화하기 위한 C++문법이다.

 

보통 함수를 작성할 때 정수, 실수, 문자 등 다양한 타입을 처리해야 하는 경우가 많아 타입마다 함수를 작성하면 코드가 중복되고 관리가 어려워질 수 있다

 

템플릿을 사용하면 하나의 함수나 클래스를 정의해 두고 다양한 타입에서 동일하게 사용할 수 있도록 만들 수 있어 이 문제를 해결할 수 있다.


템플릿

템플릿은 다음과 같은 형태로 선언한다.

template <typename T>

여기서 T는 실제 타입이 아닌, 임시로 사용하는 타입이다.

어떤 타입이 들어올지는 모르지만 그 타입을 T라고 부르겠다는 의미이다.

 

예를 들어 다음과 같은 더하는 함수를 보겠다.

int add(int a, int b)
double add(double a, double b)

이처럼 타입마다 함수를 따로 만들면 코드가 많이 늘어나는데 이를 템플릿으로 선언할 수 있다.

 

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

이렇게 사용하면 호출될 때 전달된 값의 타입에 따라 컴파일러가 자동으로 함수 코드를 생성해 호출된다.

 


템플릿 클래스

템플릿은 함수뿐만 아니라 클래스에도 사용할 수 있다.

클래스를 템플릿으로 만들면 같은 구조의 클래스를 여러 타입에서 사용할 수 있다.

 

다음은 배열을 관리하는 클래스를 예로 들어보겠다.

IntArray
DoubleArray
CharArray


template <typename T>
class Array

위는 배열을 관리하는 클래스를 타입마다 만든 것이고, 아래는 템플릿 클래스를 이용해 모든 타입을 처리할 수 있도록 만든 템플릿 클래스이다.

 

다음은 예시로 만든 Array 클래스이다. 이를 템플릿 클래스 구조로 만들면 다음과 같다.

각 기능은 다음과 같다.

  • data[100] : 최대 100개의 데이터를 저장하는 배열
  • size : 현재 저장된 데이터 개수

다음은 메서드이다.

  • add()
    • 새로운 원소를 배열의 마지막에 추가
    • 최대 100개 까지만 저장 가능
  • remove()
    • 배열의 마지막 원소 삭제
  • print()
    • 현재 배열에 저장된 모든 원소 출력

 

이제 생성한 템플릿 클래스를 사용하는 예시를 보겠다.

Array<int> arr;
Array<double> arr;
Array<char> arr;

 

다음과 같이 다양한 타입의 배열을 만들 수 있다.

이후 클래스처럼 사용하면 값에 따라 각 타입에 맞게 사용할 수 있다.

 

템플릿의 장점

  • 코드 중복을 줄일 수 있다.
  • 하나의 코드로 여러 타입을 처리할 수 있다.
  • 코드 재사용성이 높아진다.
  • 유지보수가 쉬워진다.

이처럼 템플릿은 C++에서 매우 중요한 기능이며, 다양한 타입을 다루는 프로그램에서 효율적인 코드 작성에 큰 도움을 주는 기능이다.