나의 작은 valley
[cpp] 템플릿(template) 본문
728x90
템플릿 도입의 필요성
c/c++은 파이썬 같은 언어와 달리 자료형을 정해주면 바꿀 수 없다. 그렇기 떄문에 동일한 기능을 하는 클래스에 자료형만이 다르다면 자료형만을 바꾼 클래스를 또 만들어줘야한다. 얼마나 귀찮은가 !
class MyInt
{
public:
int data_;
};
class MyDouble
{
public:
double data_;
};
(생성자를 추가로 선언하면 되긴하다. 이후 추가로 설명하겠다.)
템플릿
위와 같은 상황에서 다음과 같이 템플릿을 사용하여 하나의 클래스로 여러 자료형에 대한 클래스를 만든 것처럼 사용가능하다.
template <typename T> //T 대신 다른 문자열을 사용해도 됨.
class MyClass
{
public:
T data_;
};
실행:
int main()
{
MyClass<int> my_int;
MyClass<double> my_double;
cout << sizeof(my_int) << " " << sizeof(my_double) << endl;
//출력 4 8
return 0;
}
my_int와 my_double이라는 변수는 동일한 클래스의 인스턴스지만 다른 크기를 가지고 있는 것을 확인할 수 있다.
연산자 오버로딩 vs 템플릿
물론 다음과 같은 경우를 생각할 수 있다.생성자를 여러개 만들어서 다른 자료형이 입력값(파라미터)로 들어올 떄마다 다른 생성자를 생성하면 되는거 아닌가? 물론 그래도 되는데 ... 그러면 모든 자료형에 대한 생성자를 일일히 만들어줘야한다는 번거로움이 있다.
즉, 상황에 따라 다르다. 만약 여러 자료형에 대한 일반적인 처리가 필요하거나 코드의 재사용성이 중요하다면 템플릿을 사용하는 것이 좋다. 특정 자료형에 대한 제한이 필요하거나 간단한 프로젝트라면 생성자 오버로딩을 사용하여 명확하고 간결한 코드를 작성할 수 있다.
또한 맴버 변수의 자료형은 연산자 오버로딩을 바꿀 수 없다.
728x90
'Computer Science > [c++] 문법 정리' 카테고리의 다른 글
[cpp] 텍스트 파일 입출력 (0) | 2023.09.17 |
---|---|
[cpp] 헤더 파일 (0) | 2023.09.17 |
[cpp] 구조체(struct) (0) | 2023.09.17 |
[cpp] 동적할당 (0) | 2023.09.17 |
[cpp] 함수 (0) | 2023.09.17 |
Comments