C++ STL: 10장 - STL의 한계와 대안

2025. 2. 26. 18:19프로그래밍 언어/C++ STL

10.1 STL의 한계

STL은 범용적인 라이브러리이지만, 특정 상황에서는 한계가 존재합니다. 이 장에서는 STL의 제약과 이를 극복할 수 있는 방법을 소개합니다.

10.1.1 STL 사용 시 문제점

  1. 실시간 시스템에서의 한계:
    • STL 컨테이너의 동적 메모리 할당은 예측 가능한 성능을 요구하는 시스템에서 문제가 될 수 있습니다.
  2. 메모리 사용량:
    • STL 컨테이너는 내부 메모리 관리를 위해 추가적인 오버헤드가 발생할 수 있습니다.
  3. 멀티스레딩 환경:
    • STL은 스레드 안전하지 않으므로, 동기화를 별도로 구현해야 합니다.

10.1.2 STL의 확장과 최적화

STL의 한계를 극복하기 위해 다음과 같은 방법을 고려할 수 있습니다:

  • 사용자 정의 할당자:
    • 특정한 메모리 요구 사항에 맞게 할당자를 커스터마이징하여 성능을 최적화합니다.
  • 스레드 안전 컨테이너 구현:
    • 스레드 동기화를 포함하는 커스텀 STL 컨테이너를 설계합니다.

예제:

#include <iostream>
#include <vector>
#include <mutex>

class ThreadSafeVector {
private:
    std::vector<int> vec;
    std::mutex mtx;

public:
    void push_back(int value) {
        std::lock_guard<std::mutex> lock(mtx);
        vec.push_back(value);
    }

    void print() {
        std::lock_guard<std::mutex> lock(mtx);
        for (int n : vec) {
            std::cout << n << " ";
        }
        std::cout << "\n";
    }
};

int main() {
    ThreadSafeVector tsVec;
    tsVec.push_back(1);
    tsVec.push_back(2);
    tsVec.print();

    return 0;
}

결론

STL은 강력한 도구이지만, 특수한 요구 사항에서는 사용자 정의를 통해 한계를 극복할 수 있습니다. 할당자 커스터마이징, 스레드 안전 컨테이너 설계 등 다양한 방법을 활용해 STL을 더욱 효과적으로 사용할 수 있습니다.