[C++] Template 이용하기 (Generic 프로그래밍)
🔹 Template란
C++에서 템플릿(Template)은 함수나 클래스의 정의에서 데이터 타입에 대한 매개변수화를 허용하는 기능입니다. 즉, 템플릿은 클래스나 함수를 작성할 때, 데이터 타입이나 상수 값을 매개변수로 받아서, 자동으로 여러 개의 타입이나 값에 동작하도록 하는 기능입니다.
템플릿을 사용하면, 코드의 재사용성과 유지보수성이 향상됩니다. 또한, 템플릿을 사용하여 제네릭(Generic) 프로그래밍을 할 수 있으며, 이는 STL(Standard Template Library)에서 매우 널리 사용됩니다.
🔹 Template 사용 예시
아래와 같이 Template를 정의하겠습니다.
template <typename T>
void print(T arg) {
std::cout << arg << std::endl;
}
위의 코드에서는 T라는 매개변수화된 데이터 타입을 인수로 받는 print() 함수를 정의하고 있습니다. 이렇게 템플릿을 사용하면, 여러 가지 데이터 타입에 대해 print() 함수를 재사용할 수 있습니다. 예를 들어, 다음과 같은 방법으로 print() 함수를 사용할 수 있습니다.
print<int>(42); // 출력 결과: 42
print<double>(3.14); // 출력 결과: 3.14
print<std::string>("hello"); // 출력 결과: hello
위의 코드에서는 print() 함수를 int, double, std::string 등의 다양한 데이터 타입으로 호출할 수 있습니다.
🔹 Template 사용을 고려하는 경우
1. 코드 재사용성이 높은 경우
템플릿을 사용하면, 여러 가지 데이터 타입에 대해 동작하는 함수나 클래스를 작성할 수 있습니다. 이렇게 작성된 함수나 클래스는 매우 유연하게 재사용될 수 있으므로, 코드의 재사용성이 높아집니다.
2. 다형성(polymorphism)을 지원해야 하는 경우
C++에서는 함수 오버로딩(overloading)을 통해 같은 이름의 함수를 여러 개 작성할 수 있습니다. 하지만, 함수 오버로딩은 데이터 타입에 대한 제한이 있습니다. 이러한 제한을 없애기 위해, 템플릿을 사용하여 다형성을 구현할 수 있습니다.
3. 타입 안전성(type safety)을 보장해야 하는 경우
템플릿을 사용하면, 컴파일러가 타입 체크를 수행하여 타입 안전성을 보장할 수 있습니다. 예를 들어, STL에서 제공하는 vector<T> 클래스는 T 타입의 원소를 저장하는 동적 배열입니다. 이때, vector<T>를 사용하면 T 타입에 대한 타입 체크가 수행되므로, 타입 안전성이 보장됩니다.
4. 성능이 중요한 경우
템플릿을 사용하면, 함수나 클래스의 코드를 여러 번 복사하여 다양한 데이터 타입에 대해 컴파일할 수 있습니다. 이렇게 생성된 코드는 특정 데이터 타입에 최적화되므로, 실행 속도가 빠릅니다. 따라서, 성능이 중요한 프로그램에서는 템플릿을 사용하는 것이 좋습니다.
'Programming > 알고리즘' 카테고리의 다른 글
[C++] 함수 객체 functor (Function Object) (0) | 2023.04.24 |
---|---|
[C++] class와 struct 차이. 무엇을 언제 써야할까? (0) | 2023.04.24 |
[알고리즘] 부분 수열 (w/ 비트 마스크) - 파이썬 (0) | 2021.08.22 |
[알고리즘] 다양한 정렬 (버블, 카운팅, 선택 정렬) - 파이썬 (0) | 2021.08.22 |
[알고리즘] 시간복잡도 & 공간복잡도 (0) | 2021.08.20 |