본문 바로가기

카테고리 없음

Unreal 기초 C++(8) (템플릿)

이번에는 템플릿에 대해 알아보겠습니다.

 

템플릿은 코드의 재사용성을 높이며 다양한 데이터 타입에 대해 동일한 로직을 적용할 수 있도록 하는기능입니다.

같은 코드를 여러 데이터 타입에 대해 반복 작성할 필요가 없어지므로 코드의 유지보수성이 향상됩니다.

 

이렇게 쓰면 뭔지 모를겁니다. 그냥 재사용률이 높고 여러타입의 데이터를 사용할 수 있구나라고 이해하면 편할 것 같습니다.

 

템플릿은 함수 템플릿과 클래스 템플릿으로 나눌 수 있습니다

 

 

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에 대해서 알아보겠습니다.