Page 14 -
P. 14
유틸리티의 핵심은 C++에서 메모리를 동적으로 관리할 수 있게 해주는 스마트 포인터(smart
pointer)다. 단독 소유권은 std::unique_ptr로, 공유 소유권은 std::shared_ptr로 표현한다.
std::shared_ptr는 레퍼런스 수를 세는 방식(레퍼런스 카운팅(reference counting))으로 리소스를
관리한다. std::weak_ptr는 레퍼런스 카운팅의 고질적 문제인 std::shared_ptr 사이의 순환 의존
성을 깨는 데 도움이 된다.
타입 트레이트(type trait) 라이브러리는 컴파일 시간에 타입 정보를 검사하고, 비교하고, 조작하는
데 사용된다.
시간(time) 라이브러리는 C++에 새롭게 추가된 멀티스레딩 기능에서 중요한 역할을 한다. 또한,
성능 측정에도 유용하다.
C++17에 추가된 특수 데이터 타입인 std::any, std::optional, std::variant는 각각 모든 값,
옵션 값, 변형 값을 표현한다.
1.2.2 표준 템플릿 라이브러리
표준 템플릿 라이브러리(STL)는 크게 세 가지 요소로 구성된다. 그 세 가지 요소는 컨테이너
(container), 컨테이너에 대해 실행되는 알고리즘(algorithm), 컨테이너와 알고리즘을 연결하는 반복
자(iterator)다. 이렇게 추상화된 제네릭 프로그래밍을 통해 알고리즘과 컨테이너를 고유한 방식으
로 결합할 수 있다. 컨테이너의 원소에 대해서는 최소한의 요구 사항만 지키면 된다.
그림 1-2 STL의 세 가지 구성 요소
컨테이너 반복자 알고리즘
C++ 표준 라이브러리는 다양한 종류의 컨테이너를 제공한다. 크게 보면 순차 컨테이너와 연관
컨테이너로 나눌 수 있다. 연관 컨테이너는 다시 정렬 연관 컨테이너와 비정렬 연관 컨테이너로
나뉜다.
순차 컨테이너(sequential container)에 해당하는 컨테이너마다 고유한 용도가 있지만, 95%는
std::vector로 충분하다. std::vector는 크기를 동적으로 조절할 수 있고, 메모리를 자동으로 관
리해주며, 성능도 좋다. 이와 대조적으로 std::array는 순차 컨테이너 중에서 유일하게 크기를 실
30
c++_06.indd 30 2021-11-19 오전 9:25:42