TIL: C++ 템플릿

박춘팔·2026년 4월 22일

CPP TIL

목록 보기
12/15

📅 2026-04-22

오전 1시간동안 코드카타를 하는데 아직 그럴 실력이 안돼서 일단 문법 공부를 더 해보려고한다.

템플릿

타입을 매개변수로 받는 코드 생성 매커니즘이다.
컴파일 타임에 타입별 코드를 생성하는 시스템이라고 생각하면 좋다.
TS를 하던 내 입장에서는 제네릭이라고 생각하니까 이해가 편했다.

  • 컴파일 타임에 동작
  • 타입 안정성 보장
  • 런타임 오버헤드 없음
template<typename T>
T Add(T a, T b)
{
	return a + b;
}

>> 컴파일 시

int Add (int a, int b)
{ ... }

float Add ( float a, float b)
{ ... }

왜 필요한가?

타입 안전 + 성능 확보

  • void*, 캐스팅 필요없음
  • 컴파일 타임 체크
  • inline 최적화 가능

    가상함수보다 빠름

추상화 수준 상승

  • 제네릭 프로그래밍
  • 자료구조/알고리즘을 타입과 분리

코드 재사용

여러 타입에서 같은 로직 사용

사용 예시

함수 템플릿

template<typename T>
T Max(T a, T b)
{ ... }

클래스 템플릿

template<typename T>
class Box
{
public:
	T value;
}


Box<int> a;
Box<float> b;

STL

std::vector<int> v;
std::sort(v.begin(), v.end());
  • vector<T> > 타입별 컨테이너 생성
  • sort<T> > 타입에 맞는 정렬코드 생성

템플릿 특수화

template<>
class Box<bool>
{ ... }

특정 타입에 대해 다르게 동작하도록 커스터마이징 특정 타입에 대해 다르게 동작하도록 커스터마이징

2개 이상의 타입

template<typename T, typename K, typename F ... >
class Test
{
public:
	T First;
    K Second;
    F Third;
    ...
}

Test<int, float, double> a;

가변템플릿

template<typename... Args>
  • 템플릿 코드 폭발 방지
    없으면 아래와 같이 모두 만들어줘야함
    Print(T);
    Print(T, K);
    Print(T, K, F);
    ...

가변 템플릿은 쓸 내용이 많아서 나중에 다시 한번 공부할 예정

profile
이것 저것 다해보는 삶

0개의 댓글