U E D R S I H C RSS
ID
Password
Join
나는 절대로 미래를 생각하는 일이 없다. 미래는 너무도 빨리 닥쳐오기 때문에. ―앨버트 아인슈타인



Contents

1 개요
2 설치
3 왜 boost를 사용하는가?
4 boost가 제공하는 구성기능
4.1 smart_ptr
5 composer
6 any
7 bind와 function
8 lambda
9 boost graph library(BGL)
10 spirit

1 개요 #

Boost는 표준 템플릿 라이브러리(STL)의 형태를 유지함과 동시에, 고품질의 소프트웨어 구성요소를 개발자에게 제공하는 것을 목적으로 한 공개 라이브러리입니다. 라이브러리 내의 몇몇 구성요소는 차후 C++ 표준 라이브러리에 확장으로 포함될 것을 목적으로 하고 있습니다. 물론, Boost 홈페이지에는 각각의 구성요소들에 대한 광범위한 문서를 제공하고 있습니다.

2 설치 #

모든 boost 라이브러리는 풀소스 패키지로 다운받을 수 있으며, 대부분 별도의 설치가 필요없고 헤더를 #include하는 것만으로 사용이 가능합니다. boost 참조.

3 왜 boost를 사용하는가? #

  • namespace 구분 : 라이브러리내의 모든 구성요소는 모두 "boost" namespace안에 들어있으므로 다른 std 또는 템플릿 라이브러리와 겹치지 않습니다.
  • 정기적이고 활발한 갱신 : boost는 시간에 따라 계속 규모가 커져가는 프로젝트이며, 홈페이지와 boost 발표 메일링 리스트를 통하여 계속 변동사항을 알려주고 있습니다.
  • 개발자 지원 : 메일링리스트 또는 메일 아카이브 검색을 통하여 구성요소에 대한 질의가 가능합니다.
  • 대부분의 컴파일러, 운영체계, 표준라이브러리와의 동작보장 : 게다가 많은 컴파일러의 빠진 기능에 대한 보완을 제공합니다. (템플릿 기능에 따른 문제점과 부분 템플릿 특성화 및 맴버 템플릿 friend 처리에 대한 보완이 대부분입니다)
  • 반복 테스트 : 각각의 boost 갱신버전은 상당한 반복 테스트를 거치며, 각각의컴파일러에 따른 테스트 결과를 자유롭게 열람할 수 있습니다.
  • C++ 표준 개발에 관심있는 대부분의 사람들을 boost에도 관심을 둡니다.
  • 설치와 갱신의 단순함 : 대부분의 경우, 설치 및 갱신작업은 그냥 배포본을 특정 경로에 복사해두는 것으로 끝납니다.
  • 설정변경의 용이함 : 컴파일 옵션은 하나 또는 두개의 헤더화일의 내용을 고치는 것으로 끝납니다.

4 boost가 제공하는 구성기능 #

대략 50여개의 구성기능을 제공합니다만 여기에서는 간략하게 중요한 구성요소만을 언급하도록 하겠습니다.

4.1 smart_ptr #

smart_ptr는 "초기화가 곧 자원획득"(Initialisation is Resource Acquisition)이라는 개념하에서 (특히 예외처리상에서의)자원 누수를 방지하기 위한 도구입니다. 이들은 어느정도 개비지 컬렉션과 비슷한 역할을 수행합니다. 표준 라이브러리로 제공되는 std::auto_ptr의 다음과 같은 한계점은 잘 알려져있는 내용입니다.
  • std::auto_ptr는 표준 컨테이너에 저장할 수 없습니다.
  • std::auto_ptr는 (손쉽게) pImpl (pointer-to-implementation) 구문을 작성하는데 사용할 수 없습니다.
  • std::auto_ptr는 배열로서 동작할 수 없습니다.

boost에서 제공하는 5가지 smart_ptr 구성요소는 이들 단점을 극복하고 아래와 같은 부가기능까지 제공합니다.
  • 사용자 정의 delete 함수들을 제공할 수 있습니다.
  • 불완전한 템플릿 타입을 감지할 수 있습니다.

5 composer #

함수자와 바인더는 STL의 즐겨사용하는 부분이 되어왔습니다만, 표준 라이브러리 구현만으로는 여러개의 함수를 결합하는 작업은 여전히 까다로운 경우가 있습니다. composer는 자신만의 루프를 작성해야만하는 시간을 최소화하면서 몇가지 방식으로 함수자의 결합할 수 있는 기능을 제공합니다.

6 any #

이 구성요소는 void 포인터나 union에 의존하지 않으면서, 타입 안전성을 보장하면서 서로다른 데이타타입간의 값을 이동하는 방법을 제공합니다. The design principles for this component is at least as significant as the component itself (derivation of a template class from a non template base class). boost::any와 비슷한 구현으로는 Alexandrescu의 Modern C++ Design의 함수자 구현을 들수 있습니다.

7 bind와 function #

boost::bind와 boost::function은 별도의 구성요소로 구현되어있지만, 그 내부기능은 표준 라이브러리의 바인더와 함수자의 개념을 확장하고 있습니다.

8 lambda #

lambda 라이브러리는 구문 템플릿(expression template)을 사용하여 바인더, 함수자, composer생성에 대한 단축문법들을 제공합니다. 사용하는 사람마다 견해차가 큰 구성요소이기도 한데, 주요 단점은 잘못 작성할 경우, 느리고 가독성이 떨어질 수 있다는 것입니다.

9 boost graph library(BGL) #

BGL은 상당한 자료와 훌륭한 예제를 제공하는 거대한 라이브러리입니다. "The Boost Graph Library, The: User Guide and Reference Manual"라는 책이 이미 출간되어있습니다. 그래프에 대한 각종 자료구조와 검색수단, traverse 알고리즘들을 제공합니다. graphviz관련 기능을 제외하면 헤더만으로 모든 기능이 제공되는 것도 놀랍습니다.

10 spirit #

EBNF에 호환되는 문법으로 내장 동적 파서를 구현할 수 있습니다.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-10-28 12:42:52
Processing time 0.3366 sec