2What — STL 컨테이너란?
3- C++ 표준 라이브러리(STL)가 제공하는 검증된 범용 데이터 구조 모음
4- vector, map, unordered\_map, list, deque, set 등 20여 종
5- 컨테이너 · 알고리즘 · 이터레이터 세 축으로 설계되어, 각각을 독립적으로 교체·조합 가능 (Stepanov & Lee, 1995)
6Why — 직접 구현하면 생기는 3가지 문제
71. 버그 위험
8 - 배열: 경계 검사 누락 → 버퍼 오버플로 (CVE 보안 취약점의 최다 원인)
9 - 링크드 리스트: 포인터 연결 실수 → use-after-free, 메모리 누수
10 - 비유: 집을 지을 때마다 벽돌을 직접 구워 쓰는 것과 같다
112. 재사용 불가
12 - 프로젝트 A의 해시맵을 프로젝트 B에 복사하면 인터페이스가 달라 알고리즘을 다시 작성해야 함
13 - 팀마다 MyList, CustomMap이 난립 → 코드 리뷰·온보딩 비용 폭증
143. 성능 비교 어려움
15 - 자체 구현은 벤치마크 기준이 없어 "어느 쪽이 빠른가?"에 답하기 어렵다
16 - STL은 빅오 복잡도를 표준으로 보장: 예) unordered\_map 평균 O(1) 탐색, map은 O(\log n) 탐색
17How — STL의 3축 분리 설계
18- 컨테이너: 데이터를 저장하는 구조 (vector, map, unordered\_map …)
19- 알고리즘: 데이터를 처리하는 로직 (sort, find, transform …)
20- 이터레이터: 컨테이너와 알고리즘을 연결하는 범용 커서
21- 핵심 원리: 알고리즘은 이터레이터만 알면 되고, 컨테이너의 내부 구조를 몰라도 된다 (Austern, 1998)
22- 비유: USB 포트(이터레이터)가 키보드(컨테이너)와 컴퓨터(알고리즘)를 연결 — 키보드를 바꿔도 컴퓨터는 그대로
23실제 사용 사례
24- Google 검색 인덱스: 수십억 URL을 O(1)에 조회 → unordered\_map (해시맵) 계열 구조 활용
25- 게임 엔진 오브젝트 풀: 수천 개 게임 오브젝트를 연속 메모리에 배치해 캐시 히트율 극대화 → vector 활용 (Gregory, 2018)
26- 네트워크 라우팅 테이블: IP 접두사를 정렬 상태로 유지하며 최장 접두사 매칭 → map (균형 이진 탐색 트리) 활용
27STL 설계 철학 한 문장
28- "컨테이너를 바꿔도 알고리즘은 그대로" — 이것이 STL이 30년간 C++의 근간으로 남아 있는 이유다