<CPP>
24. 클라스 템플릿(Class Template)
CodeGrimie
2021. 1. 26. 17:27
주조(Template)는 이름에서도 알 수 있다시피 찍어낼 수 있는 틀을 만들 수 있는 기능이다.
템플릿을 이용한 함수는 <ALGORITHM>/SUMMORIZE에서 계속 사용하고 있기 때문에 클라스의 경우를 살펴보자.
클라스 템플릿(Class Template)
▼ 헤더파일(.h/.hpp) 파일에 모두 들어가야한다.
#ifndef __POINT2D_H__
#define __POINT2D_H__
template <typename T>
class Point2D
{
private:
T m_x;
T m_y;
public:
Point2D(T _x, T _y);
~Point2D();
void SetPoint2D(T _x, T _y);
T GetX();
T GetY();
};
template <typename T>
Point2D<T>::Point2D(T _x, T _y)
{
m_x = _x;
m_y = _y;
}
template <typename T>
Point2D<T>::~Point2D() {}
template <typename T>
void Point2D<T>::SetPoint2D(T _x, T _y)
{
m_x = _x;
m_y = _y;
}
template <typename T>
T Point2D<T>::GetX()
{
return (m_x);
}
template <typename T>
T Point2D<T>::GetY()
{
return (m_y);
}
#endif
어떤 변수 타입이 오더라도 적용되는 X, Y좌표를 가지는 멋진 Point2D 클라스다.
기능은 별로 없지만 값을 저장하고 받아오는 것과 같은 기본적인 기능은 가지고 있다.
템플릿 클라스는 .cpp 파일에 함수들이 정의하지 않는다.
아니, 정확히 말하면 정의 되지 않는다.
템플릿은 정확히 말하면 기존의 함수나 클라스와는 전혀 다른 기능이다.
겉모습은 비슷하지만 실제로는 컴파일러가 클라스를 생성하는 하나의 { 패턴 } 일 뿐이다.
그렇기 때문에 함수처럼 개별적으로 컴파일할 수 없기 때문에 헤더 파일에 같이 존재해야 한다.
좀더 자세한 설명은 CPP 표준 위원회의 문서를 읽어보면 이해할 수 있다.
isocpp.org/wiki/faq/templates#templates-defn-vs-decl
템플릿을 이용한 프로그래밍을 일반화 프로그래밍(Generic Programming)라고 분류하기도 한다.