이번에는 템플릿에 대해 알아보겠습니다.
템플릿은 코드의 재사용성을 높이며 다양한 데이터 타입에 대해 동일한 로직을 적용할 수 있도록 하는기능입니다.
같은 코드를 여러 데이터 타입에 대해 반복 작성할 필요가 없어지므로 코드의 유지보수성이 향상됩니다.
이렇게 쓰면 뭔지 모를겁니다. 그냥 재사용률이 높고 여러타입의 데이터를 사용할 수 있구나라고 이해하면 편할 것 같습니다.
템플릿은 함수 템플릿과 클래스 템플릿으로 나눌 수 있습니다
1. 함수 템플릿
다양한 데이터 타입에 대해 동일한 기능을 수행하는 함수를 정의할 수 있게 해줍니다.
예시
// 템플릿 함수 정의
template <typename T>
T add(T a , T b){
return a + b;
}
int main() {
cout << "int 로하면: " << add(1, 2) << endl; // 3 출력
cout << "Double 로 하면 : " << add(2.2, 2.2) << endl; // 4.4 출력
return 0;
}
여기서 봐야할건 반환값을 T라는 이름으로 지정해줬다는겁니다
double이되고 int로도 사용 가능하듯이 여기서봐야할건
템플릿을 사용함으로 함수 여러개를 사용할 걸 압축한 것 을 봐야겠
2. 클래스 템플릿
클래스 템플릿은 다양한 데이터 타입을 지원하는 클래스를 정의할 수 있게 해줍니다.
함수 템플릿에서 사용한 것 과 크게 다를 건 없습니다.
템플릿 T를 만들어주고 해당 T안에 변수들을 넣어주는과정이죠
그러므로 여기서는 클래스의 기능중 하나인
생성자
에 대해서도 알아봅시다.
생성자는 클래스를 생성할때 미리 입력한 코드를 실행 시켜주는 용도입니다.
아래예시를 보시죠
<예시>
// 템플릿 클래스 정의
template <typename T>
class Apple{
private:
T value;
public:
Apple (T val) {
value = val;
}
T getValue() {
return value;
}
};
int main() {
Apple <int> intApple(123);
Apple <double> doubleApple(45.67);
std::cout << "정수 사과: " << intApple .getValue() << endl; // 123 출력
std::cout << "더블 사과: " << doubleApple .getValue() << endl; // 45.67 출력
return 0;
}
여기서 볼건
Apple (T val) : value(val) {}
Apple intApple(123);
Apple doubleApple(45.67);
-----------------------------------
이 부분 이겠네요
생성자는
Apple (T val) {
value = val;
}
이렇게 클래스안에 반환타입이 해당 클래스인 함수를 만들면 됩니다.
역할은 생성할때 이 함수를 실행시키는 겁니다.
반대로 소멸자는 ~Apple로 시작하는 함수를 만들면 됩니다.
역할은 객체가 소멸할때 실행되는 것이죠
템플릿은 함수 템플릿을 이해했다면 편합니다.
T를 저장한 클래스 그 T를 int 로 float으로 저장 가능하다
그리고 T를 가지고 있는 클래스를 선언할때
Apple<int> 즉 <>괄호와 반환값을 넣어주고 만들면
해당 클래스 T는 (예)int로 변화되는것이
템플릿의 장점
동일한 로직을 여러 데이터 타입에 대해 사용할 수 있습니다.
중복 코드를 줄이고, 코드의 가독성을 높입니다.
컴파일 타임에 타입이 결정되므로, 타입 관련 오류를 조기에 발견할 수 있습니다.
요약하면
코드 재사용성 용이
유지보수 용이
타입 안전
템플릿의 단점은
템플릿을 사용하면 컴파일 시 코드가 인스턴스화되므로, 컴파일 시간이 길어질 수 있고
템플릿 코드에서 발생하는 오류는 종종 복잡하게 나타나므로, 디버깅이 어려울 수 있습니다.(확인어려움)
포인터 ,자료구조, 템플릿등 을 배우면서 느낀건
역시 코드를 작성하는데 쾌적하게 하기 위해서 배우는 거 입니다.
불필요한 코드들이 많아지면 본인은 물론 팀원들도 이해하기 어렵게되겠죠
그리고 프로그램이 더 느리게 될 수도 있을겁니다.
이걸 방지하기 위해 제목에 Unreal이지만 c++을 배우는 이유가 되는겁니다.
다음글은 c++말고 Unreal에 대해서 알아보겠습니다.