개발자 면접 공부/C-C++

C++ 템플릿(함수 템플릿)

chogyujin 2022. 9. 22. 21:41
728x90

오늘은 C++의 템플릿에 대해 공부하도록 하겠습니다.


템플릿 이란?

C++에서 제공해주는 기능으로 함수나 클래스를 개별적으로 다시 작성하지 않아도, 여러 자료 형으로 사용할 수 있도록 하게 만들어 놓은 틀 입니다.

템플릿은 두가지로 함수형 템플릿 과 클래스형 템플릿 으로 나눠집니다.

 

템플릿은 말 그대로 자료형에 따라 함수를 여러번 정의할 필요없이 template를 함수 위나 클래스 위에 정의하고 사용하면 인자값을 전달할때 그거에 맞는 매개변수로 자료형으로 변환해주는 기법입니다.

 


함수 템플릿(Function Template)

함수를 만들어 낼때, 함수의 기능은 명확하지만 자료형을 모호하게 두는 것

아래의 코드를 보면서 설명하겠습니다.

int sum(int a, int b)
{
	return a + b;
}
double sum(double a, double b)
{
	return a + b;
}

이러한 코드는 정말로 우아하지 못합니다. sum이라는 함수를 오버로딩하고있습니다. 이렇게 되면 코드의 줄만 매우 길어지는 현상이 나타납니다.

 

이것을 해결하기 위해 우리는 템플릿을 사용할수 있습니다.

 

template<typename T>
T sum(T a, T b)
{
	return a + b;
}

매우 심플한 코드가 나왔습니다. 이를 통해 우리는 자료형을 아무거나 받아도 됩니다.

 

#include<iostream>

using namespace std;

template<typename T>
T sum(T a, T b)
{
	return a + b;
}

int main()
{
	cout << sum<int>(5.5, 2.3) << endl;
	cout << sum<double>(1,4) << endl;
	cout << sum<string>("Hello World", " Nice") << endl;

	return 0;
}

sum 함수 뒤에 <> <- 이것은 어떠한 자료형을 넣을것이다 라는 명시적인 의미가 있습니다.

#include<iostream>

using namespace std;

template<typename T1, class T2>
void sum(T1 a, T2 b)
{
	cout << "T1 : " << a << endl;
	cout << "T2 : " << b << endl;
}

int main()
{
	sum<int, int>(5, 4);
	cout << endl;
	sum<double, double>(5.5, 6.5);
	cout << endl;
	sum<string, string>("abs  ", "qwe  ");
	cout << endl;
	sum<int, string>(123, " Yeah");

	return 0;
}

이렇게 템플릿을 인자를 두개를 사용할수도 있으며 T2의 경우 typename을 사용하는것이 아닌 class라는 명칭을 사용해도 무방합니다.

단 저렇게 두개의 인자를 정의하면 똑같이 호출할때도 두개의 인자를 <> 안에 넣어줘야합니다.

'개발자 면접 공부 > C-C++' 카테고리의 다른 글

Constexpr VS Const  (0) 2023.05.09
const int* p 와 int * const p의 차이점  (2) 2023.05.07
C++ STL 장단점  (0) 2022.09.21
C++의 인터페이스(Interface)  (0) 2022.09.17
가상상속  (0) 2022.09.17