학습
C++ 기본적인 템플릿 사용
C++ 기본적인 템플릿 사용 — 초급
C++ 기본적인 템플릿 사용
1. 도입 (왜 배워야 하는가)
C++의 템플릿은 코드의 재사용성과 유연성을 크게 향상시킵니다. 실무에서는 다양한 데이터 타입을 처리해야 하는 경우가 많기 때문에, 템플릿을 활용하면 같은 기능을 가진 코드를 여러 번 작성할 필요 없이 하나의 일반화된 코드를 만들 수 있습니다. 만약 템플릿을 사용하지 않으면, 각 데이터 타입에 대해 별도의 함수를 만들어야 하며, 이는 코드의 중복을 초래하고 유지보수를 어렵게 만듭니다. 결과적으로 프로젝트의 효율성과 품질이 저하될 수 있습니다.
2. 핵심 개념 설명
템플릿(Template)
템플릿은 함수나 클래스를 정의할 때, 데이터 타입을 일반화하여 지정할 수 있게 해주는 기능입니다. 예를 들어, "모든 종류의 재료로 만든 샌드위치"를 생각해보세요. 빵, 고기, 채소 등 다양한 재료를 사용할 수 있지만, 기본적인 샌드위치 구조는 같습니다.
용어 정리
| 용어 | 설명 |
|---|---|
| 함수 템플릿 | 여러 데이터 타입을 처리할 수 있는 함수 |
| 클래스 템플릿 | 여러 데이터 타입을 처리할 수 있는 클래스 |
3. 기본 코드 예제
다음은 두 숫자를 더하는 함수 템플릿의 기본적인 예제입니다.
#include <iostream>
using namespace std;
// 함수 템플릿 정의
template <typename T>
T add(T a, T b) {
return a + b;
}
int main() {
cout << add(5, 3) << endl; // 정수 덧셈
cout << add(5.5, 3.2) << endl; // 실수 덧셈
return 0;
}
실행 결과
8
8.7
코드 한 줄씩 동작 설명
#include <iostream>: 입출력 스트림을 사용하기 위해 헤더 파일을 포함합니다.using namespace std;: 표준 네임스페이스를 사용하여std::를 생략할 수 있게 합니다.template <typename T>:T라는 이름의 데이터 타입을 템플릿으로 정의합니다.T add(T a, T b): 두 개의 같은 타입a와b를 입력받아 더한 값을 반환하는 함수입니다.cout << add(5, 3) << endl;: 정수 5와 3을 더한 결과를 출력합니다.cout << add(5.5, 3.2) << endl;: 실수 5.5와 3.2를 더한 결과를 출력합니다.
4. 실전 활용 예제
예제 1: 장바구니 구현
쇼핑몰에서 여러 종류의 상품의 가격을 합산할 때 템플릿을 사용할 수 있습니다.
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
T calculateTotal(const vector<T>& items) {
T total = 0;
for (const auto& item : items) {
total += item;
}
return total;
}
int main() {
vector<int> intPrices = {1000, 2000, 3000};
vector<double> doublePrices = {1000.50, 2000.75, 3000.25};
cout << "Total Integer Prices: " << calculateTotal(intPrices) << endl;
cout << "Total Double Prices: " << calculateTotal(doublePrices) << endl;
return 0;
}
예제 2: 배열의 최대값 찾기
여러 데이터 타입의 배열에서 최대값을 찾는 함수 템플릿입니다.
#include <iostream>
using namespace std;
template <typename T>
T findMax(T arr[], int size) {
T maxVal = arr[0];
for (int i = 1; i < size; i++) {
if (arr[i] > maxVal) {
maxVal = arr[i];
}
}
return maxVal;
}
int main() {
int intArr[] = {1, 2, 3, 4, 5};
double doubleArr[] = {1.1, 2.2, 3.3, 4.4, 5.5};
cout << "Max Integer: " << findMax(intArr, 5) << endl;
cout << "Max Double: " << findMax(doubleArr, 5) << endl;
return 0;
}
5. 흔한 실수와 주의사항
실수 1: 템플릿을 잘못 정의하기
template <int T> // 잘못된 정의
T add(T a, T b) { // 오류 발생
return a + b;
}
올바른 코드:
template <typename T> // 올바른 정의
T add(T a, T b) {
return a + b;
}
실수 2: 템플릿 인스턴스화 문제
cout << add(5, 3.5) << endl; // 오류 발생
해결: 같은 타입만 사용해야 하므로, 둘 중 하나의 타입을 바꿔야 합니다.