코딩 공부 또는 어떠한 프로젝트로 인해 코딩을 하게될 경우 하는 기능은 동일하지만, 변수의 Type 때문에 함수를 여러게 만들 경우가 있습니다.
간단한 예로 정수의 사칙연산, 실수의 사칙연산이 있겠습니다.
#include<iostream>
using namespace std;
int Adder(int x, int y){
return x + y;
}
double Adder(double x, double y){
return x + y;
}
int main(void){
cout << Adder(10, 20) << endl;
cout << Adder(1.5, 20.999) << endl;
return 0;
}
이런 간단한 연산을 한다고 가정할 때 기능은 동일하지만 변수의 Type 때문에 함수를 2개를 만든 상황입니다.
위 예제 같은 경우는 짧고 간결해서 필요 없어 보이지만,
코드가 길어져서 해당 기능에 어떤 자료형의 변수가 들어올지 에매할때, 혹은 경우의 수가 많을 때 참 난감합니다.
경우의 수를 다 따져 가면서 위와 같이 함수를 여러게 만들어 버리면 코드가 길어지고 가독성이 떨어집니다.
한마디로 난잡해 보인단 말이죠.
※제가 int와 double만 예제로 보여드렸지만 해당 함수에는 객체 또한 들어갈 수 있습니다.
상속 관계에서 여러가지의 객체들이 사용될 경우 경우의 수는 너무나도 많아집니다.
이를 해결하기 위한 방법이 바로 템플릿 입니다.
선언 방법은 아래와 같습니다.
#include<iostream>
using namespace std;
template <class T>
T Adder(T x, T y){
return x + y;
}
int main(void){
cout << Adder<int>(10, 20) << endl;
cout << Adder<double>(1.5, 20.999) << endl;
cout << Adder(10, 20) << endl;
cout << Adder(1.5, 20.999) << endl;
return 0;
}
이렇게 선언도 간단하면서 간결해지고 코드의 효율성과 가독성이 높아진걸 볼 수 있습니다.
※참고로 함수 뒤에 해당 자료형을 선언해줘도 되지만 안해줘도 컴파일러가 알아서 처리해 줍니다.
하지만 저렇게 함수 뒤에 자료형을 붙여줌으로 써 가독성을 올리는데 도움이 되니 생략하지 맙시다.!!
템플릿 함수에는 특수화 라는것이 존재 하는데, 이 녀석의 역할은 다음과 같습니다.
"컴파일러야, 템플릿 함수가 있는데 특정 type의 변수가 들어오면 내가 따로 정의한 함수로 처리해줘~"
라는 뜻입니다.
선언 방법은 template<> 입니다.
#include<iostream>
#include<string.h>
using namespace std;
template <class T>
T Adder(T x, T y){
return x + y;
}
template <>
const char * Adder(const char * arr1, const char * arr2){
char * a = new char[100];
strcpy(a, arr1);
strcat(a, arr2);
return a;
}
int main(void){
cout << Adder("hello ", "world") << endl;
cout << Adder(10, 20) << endl;
cout << Adder(1.5, 20.999) << endl;
r
이런식으로 사용하면 되겠습니다.!!
'프로그래밍 > C++' 카테고리의 다른 글
C++ 변수 형 타입 auto (0) | 2019.07.01 |
---|---|
C++ 템플릿 클래스 (0) | 2019.05.17 |
cout, cin, endl의 연산자 오버라이딩. (0) | 2019.05.17 |
C++, 연산자 오버로딩 설명과 사용법!!(교환법칙까지~) (0) | 2019.03.12 |
C++, const란?, 사용법! (0) | 2019.03.12 |
댓글