[C++] 항목 55: 부스트를 늘 여러분 가까이에

업데이트:     Updated:

카테고리:

태그:

이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 GPT에게 요약을 요청하여 작성되었습니다.
이펙티브 C++ 제3판, 스콧 마이어스 저자, 곽용재 번역

📦 9. 그 밖의 이야기들

👉🏻 항목 55: 부스트를 늘 여러분 가까이에

🌟 부스트(Boost)란?

C++ 개발자들의 단체이자, 무료 다운로드가 가능한 C++ 라이브러리의 집합

웹사이트:

  • http://boost.org에 가면 2025년 11월 14일 기준, 아직도 활성화되어 있다

특별한 위치:

  • C++ 표준화 위원회와 유일한 밀접한 관계를 가진다
    • 표준 C++에 추가될 수 있는 기능들의 시험 장소로 사용되었다
    • 실제로도 많은 것들이 표준 C++에 추가되었다

🔍 부스트 심사 과정

라이브러리 승인 과정이 까다로우며, 공개 동료 심사에 기반을 둔다.

1. 사전 검사:

  • “토론-수정-재제출”을 반복한다

2. 부스트의 최소 요구사항 확인:

  • 컴파일이 되는 컴파일러가 최소 두 개 이상인가? (이식성)
  • 배포할 수 있는 라이선스인가?
  • etc…

3. 공식 심사:

  • 심사는 지원자가 맡으며, 아래와 같은 기준으로 평가한다
  • 설계와 구현이 얼마나 우수한가?
  • 다른 컴파일러와 운영체제에 맞춰 이식할 수 있는 코드인가?
  • 이 라이브러리가 대상 사용자(특정 분야 종사자)에게 쓸모 있는 라이브러리인가?
  • 문서화가 명료하고, 완전하고, 정확한가?

4. 심사 결과:

  • 부스트 메일링 리스트를 통해 공개적으로 올라온다
  • 심사 관리자는 승인, 조건부 승인, 기각을 결정한다

📚 부스트 라이브러리의 규모

크기/범위가 제각각이다:

⬇️ 작은 라이브러리 - 컨버전(Conversion) 라이브러리:

  • C++보다 안전하고 편리한 캐스트 연산자를 제공한다
  • numeric_cast, lexical_cast 함수가 있다

⬆️ 큰 라이브러리:

  • 부스트 그래프 라이브러리(Boost Graph Library)
  • 부스트 MPL(메타프로그래밍) 라이브러리

🗂️ 부스트 라이브러리 범주

문자열 및 텍스트 처리:

  • 타입 안정성을 갖춘 printf와 비슷한 서식화 기능
  • 정규 표현식(항목 54 참조)
  • 토큰화
  • 구문분석 기능

컨테이너:

  • STL 양식 인터페이스를 제공하는 고정 크기 배열(항목 54 참조)
  • 가변 크기 비트세트
  • 다차원 배열

함수 객체 및 고차(high-order) 프로그래밍:

  • 일부는 TR1의 기능을 구현하는 기반 라이브러리로 사용되었다
  • e.g. 람다(lambda) 라이브러리
using namespace boost::lambda;

vector<int> v;
// _1은 placeholder로, 항목 35를 참고하자.
for_each(v.begin(), v.end(),
	cout << _1 * 2 + 10 << "\n"
);

일반화 프로그래밍:

  • 특성정보(traits) 클래스 (항목 47 참조)

템플릿 메타프로그래밍(항목 48 참조):

  • 컴파일 타임 단정문
  • 부스트 MPL 라이브러리
    • 타입리스트가 하나의 예이다
    • 타입리스트(typelist): 타입을 담아 관리할 수 있는 컨테이너
// list와 닮은 컴파일 타임 컨테이너
typedef boost::mpl::list
	<float, double, long double> floats;

// "위의 floats 타입 + int"으로 이루어진,
// 타입 리스트를 만들고, 이를 types라고 부른다.
typedef boost::mpl::push_front
	<floats, int>::type types;

수학 및 수치 조작:

  • 유리수, 4원수, 8원수, 최대 공약수, 최소공배수, 난수 포함
  • 난수는 C의 rand보다 우수하다

정확성 유지 및 테스트:

  • 암시적 템플릿 인터페이스 형식화 (항목 41 참조)
  • 테스트 우선 프로그래밍

자료구조:

  • 타입 안정성을 갖춘 공용체
    • 여기서 말하는 공용체는 union이다
  • 튜플(tuple) 라이브러리
    • 현재는 표준 C++이라 당연하게 쓰지만, 이때는 TR1 라이브러리였다

타 언어와의 연동 지원:

  • C++/Python 연동 라이브러리 지원

메모리:

  • 고정 크기 할당자를 지원하는 풀(Pool) 라이브러리 (항목 50 참조)
  • 스마트 포인터(항목 13 참조)
  • 항목 44에 나왔던 scope_array는 TR1에 속하지 않는다
    • 동적으로 할당된 배열에 대해 동작하는 auto_ptr 같은 스마트 포인터이다

기타:

  • CRC 점검
  • 날짜 및 시간 조작
  • 파일 시스템 횡단

📅 2025년 현재

현재 상황:

  • 찾아보니 boost는 여전히 업데이트되고 있다
  • 하지만 현재는 잘 사용되지 않는다고 한다

잘 사용되지 않는 이유:

  • 중요한 기능들은 표준 C++에 들어왔다
  • 선택적 기능들이 너무 많아져서 무거워졌다
  • numeric_cast, lexical_cast도 여기서 소개했었는데, 많이 느리다고 한다
  • 템플릿 메타프로그래밍의 단점이 컴파일 타임이 길어진다였다
  • 해당 라이브러리를 사용할 때 선언과 구현부를 분리하지 않으면,
    컴파일이 엄청 오래 걸려서 불편하다고 한다

🧐 정리

이번 정리는 C++의 역사라고 생각하고 보자:

  • 부스트는 동료 심사를 거쳐 등록되고, 무료로 배포되는 오픈소스 C++ 라이브러리를
    개발하는 모임이자 웹사이트이다
  • C++ 표준화에 있어 영향력 있는 역할을 맡고 있다
  • 부스트에서 배포되는 라이브러리엔 TR1 구성요소에 들어간 것도 있지만,
    그 외 라이브러리도 아주 많다

Cpp 카테고리 내 다른 글 보러가기

댓글남기기