학습일지/C와 C++

C++ Template Programming

Tsukino Ren 2026. 3. 13. 15:32

Template Programming

Template 이란?

자료형에 의존하지 않고 코드를 재사용 할 수 있게 하는 기능을 말한다.

같은 기능을 하는 함수를 여러 자료형에 대해 따로 만들지 않고 하나의 코드로 처리할 수 있게 해준다.


기존 두 값을 비교할 때

int main()
{
    int A = 3;
    int B = 5;
    int ABMAX = (A, B);
    double C = 3.00;
    double D = 4.00;
    double CDMAX = (C, D);

    std::cout << ABMAX << std::endl;
    std::cout << CDMAX << std::endl;
}

각 타입별 자료형으로 만들어서 사용해 줫다.


함수 템플릿

template <typename T>
T 함수명(T 매개변수명, T 매개변수명)
{
    return 매개변수명 > 매개변수명 ? 매개변수명 : 매개변수명;
}

예시

#include <iostream>

template <typename T>
T Max(T A, T B)
{
    return A > B ? A : B;
}

int main(void)
{
    std::cout << Max(20, 10) << std::endl;
    std::cout << Max(3.14, 5.15) << std::endl;
}

출력

T 는 자료형을 대신하는 타입 변수이다.


클래스 템플릿 (Class Template)

클래스 또한 템플릿으로 만들 수 있다.

예시 )

// Main.cpp

#include <iostream>
#include <string>

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

public:
   Stat(T val) : value(val) {}
   
   T getValue() const { return value; }
   
   void setValue(T val) { value = val; }
};

class Player
{
public:
	Stat<std::string> Name;
	Stat<int> HP;
	Stat<double> ATK;

	Player() : Name("인간"), HP(100), ATK(12.5) {}
};

int main(void)
{
	Player player;

	std::cout << "Name: " << player.Name.getValue() << std::endl;
	std::cout << "HP: " << player.HP.getValue() << std::endl;
	std::cout << "ATK: " << player.ATK.getValue() << std::endl;
}

출력


Template 사용하는 이유

  • 코드 재사용성 증가
같은 로직을 여러 자료형에서 사용할 수 있다
  • 유지보수 편리
코드를 수정할 때 한 곳만 수정하면 된다.
  • STL이 Template 기반
C++ 표준 라이브러리는 대부분 Template으로 만들어져 있다.

typename , class

템플릿에서는 두 가지를 사용할 수 있다.

template <typename T>

혹은

template <class T>

기능적으로 동일하다.


핵심 정리

Template Programming

  • 자료형에 독립적인 코드를 작성한다.
  • 코드 재사용에 편하다
  • 중복 코드가 감소한다.
< vector, map, set, algorithm > 전부 Template 기반이다.

마무리

언젠가 실무에 가게되면 가장 많이 사용하게 되는게 Template 라고 하니 개념을 이해하고 넘어가는게 아닌 완전히 익숙하게

상황에 맞게 적절하게 사용할 수 있게 될때까지 깜지행이다

'학습일지 > C와 C++' 카테고리의 다른 글

Moderen C++  (1) 2026.03.15
C++ Vector  (0) 2026.03.14
C++ std::string  (0) 2026.03.13
C/C++ 상속과 다형성, 추상 클래스  (0) 2026.03.12
C++ RPG 전투 시스템 구현 과제  (0) 2026.03.11