1. 템플릿
1-1. 템플릿이란 ?
- 인스턴스를 생성하기 위한 틀은 클래스! 이와 유사하게, 함수나 클래스를 생성하기 위한 틀이 템플릿
- 이때, 템플릿은 모든 타입을 대변하는 T 타입을 이용해서 선언되는데, 덕분에 T 자리에 어떤 타입이 들어오는지에 따라 다양한 함수, 클래스를 생성할 수 있다.
🔔 제네릭(Generic) 프로그래밍
이처럼 일반화된 틀(템플릿)에 다양한 인자를 전달함으로써 여러가지 함수, 클래스를 만드는 프로그래밍
💥 템플릿 인스턴스화 (구체화)
정의된 템플릿에 구체적인 데이터 타입을 가진 인자를 전달함으로써 실제 함수, 클래스를 생성하는 과정
1-2. 템플릿의 종류
(1) 클래스 템플릿
(2) 함수 템플릿
1-3. 템플릿 선언 방법
template <typename T>
template <typename T1, typename T2....>
2. 함수 템플릿
2-1. 함수 템플릿이란 ?
- 함수를 만들어내는 틀
- 함수의 자료형은 미정되어 있음 (T) → 다양한 자료형의 함수 만들 수 있음
- 함수의 기능은 결정되어 있음
2-2. 함수 템플릿 예시
#include<iostream>
using namespace std;
template <typename T>
T Sum(T a1, T a2) {
return a1 + a2;
}
int main() {
cout << Sum<int>(1, 2) << endl; // T : int로 설정된 함수 Sum 호출 (구체화)
cout << Sum<double>(1.5, 2.5) << endl; // T : double로 설정된 함수 Sum 호출 (구체화)
return 0;
}
[참고]
만약, 템플릿을 구체화할 때, <자료형>을 별도로 명시하지 않은 경우에는
컴파일러가 인자의 자료형을 이용해서 T의 자료형을 판단한다.
2-3. 함수 템플릿 vs. 템플릿 함수
함수 템플릿 | 템플릿 함수 |
T를 이용하여 정의한 템플릿 틀 자체 | 템플릿 구체화를 통해 T의 자료형이 구체화되면서 컴파일러가 만들어내는 함수 |
template <typename T> T Sum(T a1, T a2) { return a1 + a2; } |
int Sum<int>(int a1, int a2) { return a1 + a2; } |
즉, 함수 템플릿으로 템플릿 함수를 만들어낸다 !
2-4. 템플릿 함수 vs. 일반 함수
일반적으로는 템플릿 함수보다 일반 함수의 우선순위가 더 높다.
Sum(1, 2)가 템플릿 함수 (자료형을 명시 X) 일 수도 있는데, 바로 일반 함수를 호출함
#include<iostream>
using namespace std;
template <typename T> // 템플릿
T Sum(T a1, T a2) {
return a1 + a2;
}
int Sum(int a1, int a2) { // 일반 함수
return a1 + a2;
}
int main() {
cout << Sum<int>(1, 2) << endl; // 템플릿 함수 Sum 호출
cout << Sum(1, 2) << endl; // 일반 함수 Sum 호출
return 0;
}
2-5. 함수 템플릿의 특수화
템플릿에서 특정 타입에 대하여 별도의 템플릿을 정의하는 것
#include<iostream>
using namespace std;
template <typename T>
T Max(T a1, T a2) {
return a1 > a2 ? a1 : a2;
}
template<>
char *Max<char*> (char *a1, char* a2) {
return strlen(a1) > strlen(a2) ? a1 : a2;
}
int main() {
cout << Max<int>(1, 2) << endl;
cout << Max("car", "apple") << endl;
return 0;
}
'Coding Test > C++ 기초' 카테고리의 다른 글
[C++ 기초] 오버로딩 (0) | 2022.08.11 |
---|---|
[C++ 기초] 상속 (0) | 2022.08.03 |
[C++ 기초] 클래스 (0) | 2022.08.03 |
[C++ 기초] 포인터 (0) | 2022.07.20 |
[C++ 기초] 배열 (0) | 2022.07.20 |