C++ 개념 정리

3. C++ template

CE : 하랑 2025. 12. 30. 22:59

 

 

- 개념

다양한 자료형에 따라 함수나 클래스를 생성할 수 있는 기능

 

템플릿을 사용하는 패러다임을 템플릿 메타 프로그래밍이라고 한다.

C++ -> 멀티 패러다임 언어

- 절차

- 객체

- 템플릿

 

typename : 변수처럼 사용하고 싶은 자료형의 이름

template<typename Type>

 

 

- 템플릿의 단점

여러 자료형이 사용할 수 있기에 느려지는 단점

 


정리

변수 : 자료형에 맞는 값을 저장 할 수 있는 메모리 공간

함수 : 행동

클래스 : 특정 객체를 생성하기 위해 변수와 함수를 정의하는 일종의 틀 입니다.

객체 : 클래스를 구체화 한것이다

 

인스턴스 :

- 생성된 객체, 어떤 클래스에 속하는 각각의 객체

- 객체를 생성하여 메모리에 적재된 것을 의미

 

인스턴스화 : 클래스로부터 객체를 만드는 과정

 


- 템플릿 종류

(1) 함수 템플릿 

(2) 클래스 템플릿

 

 

- 템플릿 기본 원칙

(1) 템플릿은 컴파일 타임에 타입별로 코드 생성

(2) 정의를 못 보면 인스턴스화 불가 → 링크 에러 -> 템플릿은 “정의가 사용되는 곳(번역 단위)”에서 보여야 한다

(3) 템플릿 헤더에서 선언과 구현 지향

- 템플릿은 컴파일 타임에 생성됨

  • 템플릿은 사용되는 타입마다 코드 생성
  • 컴파일러는 정의(definition)를 봐야 인스턴스화 가능
  • 그래서 사용 지점에서 정의가 항상 보이는 헤더 방식이 안전
  • 모듈 분리, 라이브러리화 이런 환경 변화에도 절대 안 깨짐

- STL / Unreal 스타일 자체가 헤더 중심

  • std::vector, TArray, TMap 전부 헤더
  • Unreal의 템플릿 유틸리티도 전부 헤더

 

h에 선언 / cpp에 구현 시

// h
template<typename T>
void Func();

// cpp
template<typename T>
void Func() { ... }

다른 cpp에서 쓰면 링크 에러

 

그래도 cpp에 둘 수 있는 경우 (예외)

- 같은 cpp에서만 호출

  • 정의 + 호출이 같은 번역 단위
  • 컴파일러가 즉시 T = int32로 인스턴스화
  • 내부 전용 헬퍼
// h
template<typename T>
void Func(...);

// cpp
Func<int32>(...);

template<typename T>
void Func(...) { ... }

 

 

- 명시적 인스턴스화

  • cpp에서 실제 코드 생성
  • 다른 cpp에서도 사용 가능
  • 단점: 타입 추가 시 cpp 수정 필요
template void Func<int32>(...);

'C++ 개념 정리' 카테고리의 다른 글

6. 생성자, 소멸자  (0) 2026.01.03
5. 연산자  (0) 2026.01.03
4. 메모리  (0) 2026.01.01
2. 추상 클래스  (0) 2025.12.30
1. 객체 지향 프로그래밍 (Object-Oriented Programming, OOP)  (0) 2025.12.30