맨위로가기

Boost (C++ 라이브러리)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

Boost는 C++ 프로그래밍 언어를 위한 광범위한 오픈 소스 라이브러리 모음이다. 스마트 포인터, 파일 시스템 추상화, 템플릿 메타 프로그래밍 등 다양한 기능을 제공하며, 효율성과 유연성을 위해 템플릿을 광범위하게 사용한다. Boost는 Boost 소프트웨어 라이선스에 따라 배포되며, 대부분 헤더 파일 기반으로 제공되어 별도의 빌드 과정 없이 사용할 수 있다. Boost는 C++ 표준화에 큰 영향을 미치며, C++11, C++17 등 최신 C++ 표준에 Boost 라이브러리의 많은 기능이 포함되었다.

더 읽어볼만한 페이지

  • 제네릭 프로그래밍 - 다형성 (컴퓨터 과학)
    다형성은 프로그래밍 언어에서 이름이 여러 자료형에 사용되거나 객체가 여러 타입으로 취급되는 능력으로, 코드 재사용성과 유연성을 높이며 임시 다형성, 매개변수 다형성, 서브타이핑 등으로 분류되고 객체 지향 프로그래밍의 중요한 특징이며 정적, 동적 다형성으로 구현된다.
  • 제네릭 프로그래밍 - 표준 템플릿 라이브러리
    표준 템플릿 라이브러리(STL)는 알렉산더 스테파노프의 주도로 탄생한 C++ 라이브러리로서, 제네릭 프로그래밍을 지원하기 위해 컨테이너, 반복자, 알고리즘, 함수 객체 등의 핵심 구성 요소로 이루어져 있으며, HP에서 무료로 공개한 구현을 기반으로 다양한 구현체가 존재한다.
  • C++ 라이브러리 - D-Bus
    D-Bus는 2002년에 시작된 프로세스 간 통신 시스템으로, 시스템 버스와 세션 버스를 통해 정보 공유, 모듈성, 권한 격리를 제공하며, 일대일 요청-응답 및 발행/구독 통신 방식을 지원한다.
  • C++ 라이브러리 - Botan
    Botan은 다양한 암호화 알고리즘을 지원하는 암호화 라이브러리이며, RSA, ElGamal, AES, SHA-256 등 널리 사용되는 알고리즘을 포함하여 공개키 암호화, 공개키 서명, 키 교환, 블록 사이퍼, 스트림 사이퍼, 해시 함수 등을 제공한다.
  • C++ - 헤더 파일
    헤더 파일은 프로그래밍 언어에서 코드 재사용성, 모듈화, 컴파일 시간 단축에 기여하며 함수 프로토타입, 변수 선언 등을 포함하고 `#include` 지시어로 소스 코드에 포함되어 사용되는 파일이다.
  • C++ - 소멸자 (컴퓨터 프로그래밍)
    소멸자는 객체가 메모리에서 제거되기 직전에 호출되는 멤버 함수로, 객체 자원 해제 및 정리 작업을 수행하며, C++ 등 여러 언어에서 구현되고 메모리 누수 방지에 기여한다.
Boost (C++ 라이브러리) - [IT 관련 정보]에 관한 문서
일반 정보
Boost 로고
Boost 로고
개발자알렉산더 스테파노프 (Alexander Stepanov)
데이비드 머서 (David Musser)
최초 릴리스1999년 9월 1일
안정화 버전 출시일}}
프로그래밍 언어C++
장르라이브러리
라이선스Boost Software License
웹사이트Boost 공식 웹사이트

2. 디자인

Boost 라이브러리는 광범위한 C++ 사용자와 응용 분야를 대상으로 한다. 스마트 포인터와 같은 범용 라이브러리부터 ''Boost FileSystem''과 같은 운영 체제 추상화, 템플릿 메타 프로그래밍(MPL) 및 특정 도메인 언어(DSL) 생성(Proto)과 같이 주로 다른 라이브러리 개발자 및 고급 C++ 사용자를 대상으로 하는 라이브러리에 이르기까지 다양하다.[7]

효율성과 유연성을 보장하기 위해 Boost는 템플릿을 광범위하게 사용한다. Boost는 C++에서 제네릭 프로그래밍 및 메타 프로그래밍에 대한 광범위한 연구와 작업의 원천이었다.[7]

3. 라이선스

Boost는 자체 자유 오픈 소스 라이선스인 Boost 소프트웨어 라이선스에 따라 라이선스가 부여된다.[11] 이는 BSD 라이선스 및 MIT 라이선스와 유사한 허가형 라이선스이지만, 이진 파일 형태로 재배포할 때 저작자 표시를 요구하지 않는다.[12] 이 라이선스는 2008년 2월부터 OSI의 승인을 받았으며,[13][14] 자유 소프트웨어 재단에 의해 자유 소프트웨어 라이선스로 간주되고 GNU 일반 공중 사용 허가서호환된다.[15]

4. 관련 인물

데이비드 아브라함스(David Abrahams)는 Boost의 창립자 중 한 명이며, 현재 커뮤니티에서 활동하고 있다.[10] 니콜라이 조수티스(Nicolai Josuttis)는 C++에 관한 여러 저서를 집필했으며, 2001년 Boost array 라이브러리에 기여했다.[10]

5. 구성 요소

Boost는 C++ 프로그래밍 언어를 위한 다양한 라이브러리들의 집합이다. 이 라이브러리들은 다음과 같은 광범위한 분야를 다루고 있다.


  • 알고리즘:
  • 알고리즘
  • 병렬 프로그래밍 (비동기 프로그래밍):
  • [https://www.boost.org/doc/libs/release/libs/thread/ thread] - 스레드
  • [https://www.boost.org/doc/libs/release/libs/context/ context] - 사용자 레벨 컨텍스트 스위치
  • [https://www.boost.org/doc/libs/release/libs/coroutine/ coroutine] - 코루틴
  • [https://www.boost.org/doc/libs/release/libs/fiber/ fiber] - 파이버
  • [https://www.boost.org/doc/libs/release/libs/compute/ compute] - OpenCL 기반의 멀티코어 CPU/GPGPU 연산 플랫폼 인터페이스
  • 자료구조 및 컨테이너:
  • [https://www.boost.org/doc/libs/release/libs/array/ array] - STL 컨테이너 방식의 고정 길이 배열 관리
  • [https://www.boost.org/doc/libs/release/libs/graph/ Boost Graph Library (BGL)] - 일반 그래프 컨테이너, 컴포넌트, 알고리즘
  • [https://www.boost.org/doc/libs/release/libs/multi_array/ multi-array] - N차원 배열 생성
  • [https://www.boost.org/doc/libs/release/libs/multi_index/ multi-index containers] - 다양한 정렬 및 접근 시맨틱스를 지원하는 인덱스 내장 컨테이너
  • [https://www.boost.org/doc/libs/release/libs/ptr_container/ pointer containers] - 포인터 관리를 위한 STL 컨테이너 기반 컨테이너
  • [https://www.boost.org/doc/libs/release/libs/property_map/ property map] - 키-값 매핑 인터페이스
  • [https://www.boost.org/doc/libs/release/libs/variant/ variant] - 타입 안전하고 효율적인 스택 기반 객체 컨테이너
  • [https://www.boost.org/doc/libs/release/libs/any/ any] - 모든 형의 값을 저장 가능한 동적 형 (헤테로지니어스 컨테이너[19])
  • [https://www.boost.org/doc/libs/release/libs/dynamic_bitset/dynamic_bitset.html dynamic_bitset] - 동적인 `std::bitset` 유사 자료 구조
  • 함수 객체 및 고차 프로그래밍:
  • [https://www.boost.org/doc/libs/release/libs/bind/ bind], [https://www.boost.org/doc/libs/release/libs/bind/mem_fn.html mem_fn] - 함수, 함수 객체, 함수 포인터 및 멤버 함수를 위한 범용 바인더
  • [https://www.boost.org/doc/libs/release/libs/function/ function] - 지연 호출 및 콜백을 위한 함수 객체 래퍼
  • [https://www.boost.org/doc/libs/release/libs/functional/ functional] - C++ 표준 함수 객체 어댑터 확장 (function object traits, negators, binders, adapters for pointers to functions and member functions 포함)
  • [https://www.boost.org/doc/libs/release/doc/html/hash.html hash] - C++ TR1 기반 해시 함수 객체 구현
  • [https://www.boost.org/doc/libs/release/libs/lambda/ lambda] - 람다 추상화를 이용한 익명 함수 객체 정의 및 조작
  • [https://www.boost.org/doc/libs/release/libs/core/ref.html ref] - 함수 템플릿에서 C++ 참조 기능 강화 유틸리티
  • [https://www.boost.org/doc/libs/release/libs/utility/doc/html/utility/utilities/result_of.html result_of] - 함수 객체 반환 값 형 획득
  • [https://www.boost.org/doc/libs/release/libs/signals2/ signals2] - 관리되는 시그널 및 슬롯 콜백 구현
  • 제너레이터:
  • [https://www.boost.org/doc/libs/release/doc/html/boost_random.html random] - 의사 난수[17]
  • [https://www.boost.org/doc/libs/release/libs/uuid/doc/uuid.html uuid] - UUID[18]
  • 정당성 및 테스트:
  • [https://www.boost.org/doc/libs/release/libs/concept_check/ concept check] - 템플릿 파라미터 제한
  • [https://www.boost.org/doc/libs/release/libs/static_assert/ static assert] - 컴파일 시 어서트 지원
  • [https://www.boost.org/doc/libs/release/libs/test/ Boost Test Library] - 테스트 프로그램 작성, 구성 및 실행 제어 컴포넌트
  • 입출력
  • 언어 간 지원 (Python용)
  • 반복자 관련:
  • [https://www.boost.org/doc/libs/release/libs/iterator/ iterators]
  • [https://www.boost.org/doc/libs/release/libs/utility/operators.htm operators] - 사용자 정의 반복자 연산자 오버로딩
  • [https://www.boost.org/doc/libs/release/libs/tokenizer/ tokenizer] - 문자 시퀀스 토큰화
  • 수학 및 계산:
  • [https://www.boost.org/doc/libs/release/libs/qvm/doc/index.html QVM] - 3차원 컴퓨터 그래픽스를 위한 쿼터니언, 벡터, 행렬 연산
  • 메모리 관리:
  • [https://www.boost.org/doc/libs/release/libs/pool/ pool] - 분할된 스토리지 기반 메모리 관리
  • [https://www.boost.org/doc/libs/release/libs/smart_ptr/ smart_ptr] - 스마트 포인터 클래스 템플릿 (scoped_ptr, scoped_array, shared_ptr, shared_array, weak_ptr, intrusive_ptr)
  • [https://www.boost.org/doc/libs/release/libs/utility/utility.htm utility] - base from member idiom, checked delete, next and prior functions, noncopyable, addressof, result_of 등
  • 구문 분석
  • 전처리기 메타프로그래밍
  • 문자열 및 텍스트 처리:
  • [https://www.boost.org/doc/libs/release/libs/lexical_cast/ lexical_cast] - 텍스트 형 변환
  • [https://www.boost.org/doc/libs/release/libs/format/ format] - 타입 안전 포맷 문자열
  • [https://www.boost.org/doc/libs/release/libs/iostreams/ iostreams] - C++ 스트림 및 스트림 버퍼 보조
  • [https://www.boost.org/doc/libs/release/libs/regex/ regex], [https://www.boost.org/doc/libs/release/libs/xpressive/ xpressive] - 정규 표현식 지원
  • Spirit - 객체 지향 재귀 하향 구문 분석 생성 프레임워크
  • [https://www.boost.org/doc/libs/release/libs/algorithm/string/ string algorithms] - 문자열 알고리즘
  • [https://www.boost.org/doc/libs/release/libs/tokenizer/ tokenizer] - 문자열 및 문자 시퀀스 토큰화
  • [https://www.boost.org/doc/libs/release/libs/wave/ wave] - C99/C++ 전처리기 표준 구현
  • 템플릿 메타프로그래밍:
  • [https://www.boost.org/doc/libs/release/libs/mpl/ mpl] - 컴파일 시 알고리즘, 시퀀스 및 메타 함수 프레임워크
  • [https://www.boost.org/doc/libs/release/libs/static_assert/ static assert] - 컴파일 시 어서트 지원
  • [https://www.boost.org/doc/libs/release/libs/type_traits/ type traits] - 형 속성 정의 템플릿
  • 기타:
  • 불완전한 컴파일러 회피 수단


Boost는 템플릿을 광범위하게 사용하여 효율성과 유연성을 보장하며, C++에서 제네릭 프로그래밍 및 메타 프로그래밍 연구에 기여했다.[7]

대부분의 Boost 라이브러리는 헤더 파일 기반으로 인라인 함수 및 템플릿으로 구성되어 별도 빌드가 필요 없다. 일부는 독립적으로 존재한다.[8][9]

5. 1. 선형 대수

Boost는 '''uBLAS'''라는 선형대수 라이브러리를 제공하며, BLAS 레벨 1, 2, 3의 연산을 구현한다.[17]

  • 다음은 벡터와 행렬의 곱셈 방법을 나타낸다.


```cpp

#include

#include

#include

using namespace boost::numeric::ublas;

/* "y = Ax" 예시 */

int main()

{

vector x(2);

x(0) = 1; x(1) = 2;

matrix A(2,2);

A(0,0) = 0; A(0,1) = 1;

A(1,0) = 2; A(1,1) = 3;

vector y = prod(A, x);

std::cout << y << std::endl;

return 0;

}

5. 2. 난수 생성

Boost.Random은 분포에 의존하지 않는 의사 난수 생성기와 확률 분포를 제공한다.[17] 메르센 트위스터 생성기를 이용한 정규 분포 샘플링 등을 지원한다.

다음은 메르센 트위스터 생성기를 이용하여 정규 분포를 통해 샘플링하는 방법을 나타낸 코드이다.



#include

#include

double SampleNormal(double mean, double sigma)

{

// 비결정론적 난수 생성기를 시드로 사용.

boost::random::random_device seed_gen;

// 메르센 트위스터 난수 생성기 생성.

typedef boost::random::mt19937 MyGenerator;

MyGenerator rand_gen(seed_gen);

// 가우스 확률 분포 선택.

typedef boost::random::normal_distribution MyDistribution;

MyDistribution dist(mean, sigma);

// 함수의 형태로 난수 생성기를 분포에 바인딩한다.

boost::random::variate_generator sampler(rand_gen, dist);

// 분포에서 샘플링한다.

return sampler();

}



더 자세한 내용은 [https://www.boost.org/doc/libs/release/libs/random/ Boost Random Number Library]에서 확인할 수 있다.

Boost.Random의 일부 기능은 C++11 표준 라이브러리에 포함되었다.

5. 3. 텍스트 파싱

Boost.Spirit은 바쿠스-나우어 표기법에 최대한 가깝게 C++(C++) 프로그램 형식으로 직접 파서를 기술할 수 있는 Boost에서 가장 복잡한 라이브러리 중 하나이다.[17]

쉼표로 구분된 숫자를 읽는 파서의 예시는 다음과 같다.

```cpp

#include

#include

#include

#include

#include

using namespace std;

using namespace boost::spirit;

// Parser comma-separated numbers

bool parse_numbers(const char* str, vector& v)

{

return parse(str,

// Start grammar

(

real_p[push_back_a(v)] >> *(',' >> real_p[push_back_a(v)])

)

,

// End grammar

space_p).full;

}

```

자세한 내용은 [https://www.boost.org/doc/libs/release/libs/spirit/ Spirit User's Guide]에서 확인할 수 있다.

5. 4. 정규 표현식

Boost.Regex는 정규 표현식을 이용하는 라이브러리이다. 필터, 검색, 파싱, 텍스트 처리에 필요한 각종 함수를 가지고 있다.

정규 표현식의 종류로 PCRE, POSIX 기본 정규 표현식과 POSIX 확장 정규 표현식을 사용할 수 있다.

Boost.Regex의 서브셋은 C++11의 표준 라이브러리로 채택되었다.

Boost.Xpressive는 동적 정규 표현식과 정적 정규 표현식을 제공한다.

다음은 "나는 2052/10/30에 태어났다."라는 문자열에서 연, 월, 일을 추출하는 정규 표현식을 보여주는 프로그램 예시이다. 두 경우 모두 출력 결과는 같다.

```cpp

#include

#include

#include

using namespace boost::xpressive;

int main()

{

// 기존의 char[] 타입 문자열 리터럴의 내부 표현은 처리 시스템에 따라 다르며, Shift_JIS의 0x5c 등, 경우에 따라 문제를 일으킬 수 있으므로 UTF-8 문자열 리터럴을 사용해야 한다.

// 그러나 C++20 이후에는 UTF-8 문자열 리터럴의 타입이 char8_t[] 타입이 되므로 명시적인 캐스팅이 필요하다.

// 또한, Microsoft Visual C++ 환경에서는 기본적으로 UTF-8 문자열을 콘솔에 출력할 수 없다.

std::string str = "私は2052/10/30に生まれた。";

sregex rx = sregex::compile(R"((\d{1,4})/(\d{1,2})/(\d{1,2}))");

smatch m;

if (regex_search(str, m, rx)) {

// 여기서는 range-based for 구문을 사용하고 있으므로 C++11 이후를 지원하는 컴파일러가 필요하다.

for (const auto& e : m) {

std::cout << e << std::endl;

}

}

}

```

```cpp

#include

#include

#include

using namespace boost::xpressive;

int main()

{

std::string str = "私は2052/10/30に生まれた。";

mark_tag years(1), month(2), days(3);

sregex rx =

(years = repeat<1, 4>(_d)) >> '/' >>

(month = repeat<1, 2>(_d)) >> '/' >>

(days = repeat<1, 2>(_d));

smatch m;

if (regex_search(str, m, rx)) {

std::cout << m[0] << std::endl;

std::cout << m[years] << std::endl;

std::cout << m[month] << std::endl;

std::cout << m[days] << std::endl;

}

}

5. 5. 그래프 알고리즘

Boost.Graph는 그래프 이론에 대한 다양한 관점과 알고리즘을 제공하는 Boost 라이브러리이다. 그래프 개념을 유연하고 효과적으로 구현하며, 위상 정렬 등의 알고리즘을 지원한다.[17]

다음은 위상 정렬 알고리즘의 예시이다.

```cpp

#include

#include

#include

#include

#include

#include

#include

int main()

{

using namespace boost;

// 그래프 유형

typedef adjacency_list
property > Graph;

// 정점 처리

typedef boost::graph_traits::vertex_descriptor Vertex;

// 정점 체인을 위한 컨테이너

typedef std::vector container;

// 간선 표현 유형

typedef std::pair Pair;

// 그래프의 간선

Pair edges[6] = {

Pair(0,1), Pair(2,4),

Pair(2,5),

Pair(0,3), Pair(1,4),

Pair(4,3)

};

// 개수

Graph G(edges, edges + 6, 6);

// 정점의 숫자 핸들을 얻기 위한 사전

boost::property_map::type id = get(vertex_index, G);

// 정렬된 정점을 저장하기 위한 컨테이너

container c;

// 알고리즘 실행

topological_sort(G, std::back_inserter(c));

// 결과 출력: 컨테이너에서 그래프의 정점 디스크립터 정렬,

// 정점의 일련 번호 가져오기

std::cout << "위상 검사:";

for (container::reverse_iterator ii = c.rbegin(); ii != c.rend(); ++ii)

std::cout << id[*ii] << " ";

std::cout << std::endl;

return 0;

}

```

자세한 내용은 https://www.boost.org/doc/libs/release/libs/graph/ The Boost Graph Library를 참조.

5. 6. 멀티스레딩

Boost.Thread는 플랫폼에 독립적인 스레드 추상화를 제공한다. POSIX 스레드를 기반으로 객체 지향화된 형태이다.[17]

  • 스레드를 생성하는 코드 예시는 다음과 같다.



#include

#include

void hello_world()

{

std::cout << "Hello world, I'm a thread!" << std::endl;

}

int main()

{

// hello_world 함수를 호출하는 새로운 스레드를 시작한다.

boost::thread my_thread(&hello_world);

// 스레드가 종료될 때까지 기다린다.

my_thread.join();

return 0;

}



Boost.Thread의 서브셋은 C++11 표준 라이브러리로 통합되었다.

6. C++ 표준 라이브러리와의 관계

Boost는 C++ 표준화 위원회 위원들에 의해 설립되었으며, 현재도 많은 위원들이 구성원으로 남아 있다. 이러한 이유로 Boost 커뮤니티는 C++ 표준화에 큰 영향력을 가지고 있다. 실제로 표준화 위원회가 발표한 TR1의 2/3 이상이 Boost 라이브러리를 기반으로 하고 있다. Random, Regex, Thread 등은 모두 C++11 규격의 표준 라이브러리로 정식으로 도입 및 표준화되었다. 그 후 Optional이나 Any 등이 C++17 규격으로 도입되면서 계속해서 영향을 주고 있다. 이로 미루어 볼 때, Boost는 새롭게 고안된 기능을 표준화하기 전 시험 운용하는 장소라고도 할 수 있다.

참조

[1] 웹사이트 Old Versions https://www.boost.or[...] 2017-04-11
[2] 웹사이트 List of Boost libraries https://www.boost.or[...]
[3] 웹사이트 Boost Software License https://www.boost.or[...] 2022-01-06
[4] 웹사이트 Library Technical Report http://www.open-std.[...] JTC1/SC22/WG21 - The C++ Standards Committee 2012-02-01
[5] 웹사이트 A Threading API for C++ http://www.open-std.[...]
[6] 웹사이트 StackOverflow.com site https://stackoverflo[...]
[7] 서적 C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond Pearson Education 2004-12-10
[8] 웹사이트 Asio web site http://think-async.c[...]
[9] 웹사이트 Spirit web-site http://boost-spirit.[...]
[10] 웹사이트 Boost Mailing Lists (A.K.A. Discussion Groups) http://www.boost.org[...] 2020-04-28
[11] 웹사이트 Boost Software License - Version 1.0 https://www.boost.or[...] 2023-12-22
[12] 웹사이트 Boost Software License http://www.boost.org[...] 2016-08-01
[13] 웹사이트 Boost mailing list archive http://thread.gmane.[...]
[14] 웹사이트 Boost Software License 1.0 (BSL-1.0) {{!}} Open Source Initiative http://opensource.or[...] 2008-02-05
[15] 웹사이트 Various Licenses and Comments about Them - GNU Project - Free Software Foundation (FSF) https://www.gnu.org/[...]
[16] 웹사이트 Version 1.87.0 https://www.boost.or[...] 2024-12-24
[17] 문서 乱数 - boostjp https://boostjp.gith[...]
[18] 문서 オブジェクトにユニークなIDを付ける - boostjp https://boostjp.gith[...]
[19] 문서 動的型 - boostjp https://boostjp.gith[...]
[20] 웹인용 Old Versions http://www.boost.org[...] 2017-04-11



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com