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
   9   10   11   12   13   14   15   16   17   18   19