1. 일반화 프로그래밍(generic programming)
- C++이 가지는 프로그래밍 언어로서의 특징 중 하나로 일반화 프로그래밍(generic programming)을 들 수 있습니다.
- 일반화 프로그래밍은 데이터를 중시하는 객체 지향 프로그래밍과는 달리 프로그램의 알고리즘에 그 중점을 둔다
- 이러한 일반화 프로그래밍을 지원하는 C++의 대표적인 기능 중 하나가 바로 템플릿(template)이다.
2. 템플릿(template)이란,
- 매개변수의 타입에 따라 함수나 클래스를 생성하는 매커니즘을 의미한다.
- 타입이 매개변수에 의해 표현되므로, 매개변수화 타입(parameterized type)이라고도 불린다.
- 템플릿을 사용하면 타입마다 별도의 함수나 클래스를 만들지 않고, 여러 타입에서 동작할 수 있는 단 하나의 함수느 클래스를 작성하는 것이 가능하다.
3. 함수 템플릿(function template)
- C++에서 함수 템플릿(function template)이란 함수의 일반화된 선언을 의미합니다.
- 함수 템플릿을 사용하면 같은 알고리즘을 기반으로 하면서, 서로 다른 타입에서 동작하는 함수를 한 번에 정의할 수 있습니다.
- 임의의 타입으로 작성된 함수에 특정 타입을 매개변수로 전달하면, C++ 컴파일러는 해당 타입에 맞는 함수를 생성해 줍니다.
- C++ 함수 템플릿 정의
4. 함수 템플릿 예제(Swap() 함수)
template <typename T>
void Swap(T& a, T& b);
int main(void)
{
int c = 2, d = 3;
cout << "c : " << c << ", d : " << d << endl;
Swap(c, d);
cout << "c : " << c << ", d : " << d << endl;
string e = "hong", f = "kim";
cout << "e : " << e << ", f : " << f << endl;
Swap(e, f);
cout << "e : " << e << ", f : " << f << endl;
return 0;
}
template <typename T>
void Swap(T& a, T& b)
{
T temp;
temp = a;
a = b;
b = temp;
}
/* 실행 결과
c : 2, d : 3
c : 3, d : 2
e : hong, f : kim
e : kim, f : hong
*/
5. 함수 템플릿의 인스턴스화
함수 템플릿이 각각의 타입에 대해 처음으로 호출될 때, C++ 컴파일러는 해당 타입의 인스턴스를 생성한다.