- 개념
다양한 자료형에 따라 함수나 클래스를 생성할 수 있는 기능
템플릿을 사용하는 패러다임을 템플릿 메타 프로그래밍이라고 한다.
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 |