반응형

C++ 템플릿과 STL: 핵심 개념 정리

📌 템플릿(Template)이란?

템플릿은 C++에서 일반화 프로그래밍을 구현하는 핵심 도구입니다.
함수나 클래스를 데이터 타입에 독립적으로 설계할 수 있게 해주며,
동일한 로직을 다양한 타입에 재사용할 수 있게 합니다.

🛠 템플릿의 핵심 특징

  • 타입 추상화: typename T로 타입을 매개변수화하여 코드 재사용성 ↑
  • 컴파일 시 인스턴스화: 실제 사용 시점에 구체적인 타입으로 생성됨

📝 템플릿 예시

1. 함수 템플릿

#include <iostream>
using namespace std;

template <typename T>
T myMax(T a, T b) {
    return (a > b) ? a : b;
}

int main() {
    cout << myMax(10, 20) << endl;        // int 타입 사용
    cout << myMax(3.14, 2.73) << endl;    // double 타입 사용
    cout << myMax('a', 'z') << endl;      // char 타입 사용
    return 0;
}
  • 동작 원리: 호출 시 전달된 인자의 타입에 따라 T가 int, double, char로 대체됩니다.

2. 클래스 템플릿

#include <iostream>
using namespace std;

template <typename T>
class MyContainer {
private:
    T value;
public:
    MyContainer(T val) : value(val) {}
    T getValue() const { return value; }
};

int main() {
    MyContainer<int> intContainer(100);      // int 타입 컨테이너
    MyContainer<double> doubleContainer(3.14); // double 타입 컨테이너

    cout << intContainer.getValue() << endl;    // 100 출력
    cout << doubleContainer.getValue() << endl; // 3.14 출력
    return 0;
}
  • 활용: 컨테이너 클래스를 타입에 관계없이 유연하게 생성 가능합니다.

🧩 STL에서의 템플릿 활용

**STL(Standard Template Library)**은 템플릿을 기반으로 한 범용 라이브러리입니다.
모든 구성 요소가 템플릿으로 구현되어 타입 독립적이며 재사용성이 극대화되었습니다.

STL의 주요 구성 요소

구성 요소설명예시

컨테이너 데이터 저장 구조 vector<T>, map<Key, T>
알고리즘 데이터 처리 함수 sort(), find()
이터레이터 컨테이너 요소 접근 도구 vector<int>::iterator
함수 객체 알고리즘 동작 커스터마이징 비교 함수, 람다 표현식

📚 STL의 분류

1. 컨테이너 (Container)

  • 시퀀스 컨테이너: 순차적 데이터 저장
    vector, list, deque
  • 연관 컨테이너: 정렬된 트리 구조 (탐색 O(log n))
    set, map
  • 비정렬 컨테이너: 해시 테이블 기반 (탐색 평균 O(1))
    unordered_set, unordered_map
  • 어댑터: 특정 인터페이스 제공
    stack, queue

2. 알고리즘 (Algorithm)

  • 정렬/검색: sort(), binary_search()
  • 수정: transform(), reverse()
  • 병렬 처리: C++17부터 std::execution::par 지원

3. 이터레이터 (Iterator)

  • 종류: 입력, 출력, 순방향, 양방향, 랜덤 액세스
  • 역할: 컨테이너와 알고리즘을 연결하는 추상화 계층

🔍 정리

  • 템플릿: 타입에 독립적인 코드 작성 → 재사용성 
  • STL: 템플릿 기반 컨테이너/알고리즘 라이브러리
     vector<int>, vector<string>  동일한 구조로 다양한 타입 처리
  • 이터레이터: 알고리즘과 컨테이너를 유연하게 연결
반응형

+ Recent posts