C++ 템플릿

왜 템플릿을 사용해야 할까?
 템플릿은 다른 언어에서는 찾아볼 수 없는 C++만의 독특한 기능입니다. 템플릿은 함수와 클래스까지도 자동으로 생성해 줄 수 있는 중요한 기능입니다.

1. 템플릿 클래스
 템플릿 클래스는 불필요하게 반복되는 코드를 아주 짧게 관리할 수 있습니다.
예를 들어,
class AutoArray          //매개변수의 형식의 정보를 다루는 배열
{
public:
     AutoArray(int *ptr) {...}
     AutoArray(float *ptr) {...}
     AutoArray(char *ptr) {...}
...
}

라는 코드를
template <typename T>
class AutoArray
{
public:
     AutoArray(T *ptr) { _ptr=ptr; }
...
}
이런 식으로 사용할 수 있습니다. 여기서 T를 템플릿 파라미터라고 합니다.

템플릿 클래스의 사용은
AutoArray<float> arr(new float[100]);
이런 식으로 꺽쇠 안에 다룰 형식을 집어넣으면 됩니다.

2. 템플릿 함수
 템플릿 함수 또한 템플릿 클래스와 사용 방법은 거의 비슷합니다.
template<typename T>
T max(T a, T b)
{
     return (a > b) ? a : b;
}

int main()
{
     int i=max(3,5);
     return 0;
}

다음과 같이 코드를 짰을 때, i=max(3,5)에서 max의 반환형과 매개변수의 형식은 int로 인식이 됩니다.

3. 템플릿 사용 시 유의할 점
 1) 템플릿은 컴파일 시간에 코드를 만들어낸다
  말 그대로입니다. 템플릿은 프로그램이 실행되는 도중이 아니라, 소스코드를 컴파일하는 도중에 클래스나 함수를 만들어냅니다. 이는 아무리 템플릿을 많이 사용하더라도 프로그램이 느려질 일이 없다는 것을 나타냅니다. 컴파일 시간이 오래 걸린다는 단점이 있긴 하지만, 실행 속도로 충분히 감당할 수 있습니다.

 2) 템플릿 함수의 정의는 헤더 파일에 놓여야 하니다
  템플릿 함수를 정의하는 것은 실제로 함수를 정의하는 의미보다는 컴퓨터에게 함수를 정의하는 방법을 알려주는 것과 유사합니다. 그렇기 때문에 이런 특수한 규칙이 존재하는 것입니다. 여기서 템플릿 함수는 일반 함수, 멤버 함수 모두 포함합니다.

댓글