IMCAT.DEV
로그인 가입
C++ 입문 자료구조

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; // 오류 발생

    해결: 같은 타입만 사용해야 하므로, 둘 중 하나의 타입을 바꿔야 합니다.

    6. 정리

  • 템플릿은 코드의 재사용성을 높여준다.
  • 다양한 데이터 타입을 처리할 수 있게 해준다.
  • 함수 템플릿과 클래스 템플릿을 활용할 수 있다.
  • 다음에 학습할 주제로는 "C++ STL" (표준 템플릿 라이브러리)을 추천한다. STL은 템플릿을 활용한 데이터 구조와 알고리즘을 제공하여, 실무에서 매우 유용하게 사용된다.