[C++] The C++ Programming Language: 5. A Tour of C++: Concurrency and Utilities (1)
5.1 Introduction 최종 사용자(end-user)의 관점에서 보았을 때, 이상적인 표준 라이브러리는 모든 필요를 직접적으로 지원하는 컴포넌트들을 지원해주어야 합니다. 응용프로그램 도메인에서, 거대한 상용라이브러리는 그러한 이상에 근접해있죠. 하지만 C++ 표준 라이브러리의 목표는 그러한 것이 아닙니다. 관리 가능하고 보편적인 라이브러리는 모두를 만족시킬 수 없습니다. 대신 C++ 표준 라이브러리는 대부분의 응용프로그램 영역에서 대부분의 사람들에게 유용할 컴포넌트들을 제공하는데 목적을 두죠. 즉, 다양한 필요들의 교집합에 집중하고 있다는 것입니다. 추가적으로, 꽤나 중요한 응용프로그램 영역들을 위해 수학적 계산이나 문자열 처리 등은 서서히 들어왔습니다. 5.2 Resource Management 꽤나 많은 프로그램들의 핵심 작업 중 하나는 자원 관리입니다. 자원은 습득된 이후에 반드시 해제되어야 하는 것입니다. 메모리, 락(locks), 소켓, 스레드 핸들, 파일 핸들 등이 그 예입니다. 오랫동안 동작하는 프로그램들의 경우, 적시에 자원을 해제해주지 못해(누수) 심각한 성능 저하를 야기하고 결국에는 크래쉬라는 비참한 최후를 맞이하기도 합니다. 짧은 프로그램의 경우도 누수로 인해 메모리를 제한 당하고, 실행 시간이 수십 배 증가하여 곤란해질 수 있습니다. 표준 라이브러리 컴포넌트는 자원 누수를 피하도록 설계되었습니다. 이를 위해 생성자와 소멸자 쌍을 이용해 해당 객체의 생명주기를 벗어나지 않는 언어적 차원의 자원 관리를 이야기하려고 합니다. Vector에서의 생성자와 소멸자 쓰임은 요소들의 생명주기를 관리하기 위함이었습니다. 모든 표준 라이브러리 컨테이너는 이와 비슷하게 구현되어 있습니다. 중요한 사실은, 이러한 접근이 예외를 이용한 에러 처리와 올바르게 상호작용한다는 것입니다. 예를 들어, 표준 라이브러리 lock 클래스가 있죠: 1 2 3 4 5 6 7 mutex m; // ...