Boost C++ 애플리케이션 개발 2/e [부스트 라이브러리 예제를 활용한 쉽고 빠른 프로그램 개발]
- 원서명Boost C++ Application Development Cookbook - Second Edition: Recipes to simplify your application development (ISBN 9781787282247)
- 지은이안토니 폴루킨(Antony Polukhin)
- 옮긴이한정애
- ISBN : 9791161753683
- 39,000원
- 2019년 11월 12일 펴냄
- 페이퍼백 | 560쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 프로그래밍 언어
책 소개
요약
현대 C++에 맞춰 부스트 라이브러리를 소개한다. 부스트 라이브러리는 C++ STL로 포함되기 전에 실험적인 라이브러리를 철저히 검증해 정식으로 선보인다. 부스트에서 C++11, C++14뿐 아니라 C++17에 포함된 라이브러리도 상당히 많다. 다시 말해, 부스트를 쓰면 누구보다 미래의 STL을 빨리 접할 수 있다. 이 책에서는 메모리를 포함한 자원 관리, 문자열 처리, 다중 스레드 등 실제 구현에서 자주 쓰일 레시피를 제시한다.
프로그래밍 실력을 한층 끌어올리고 싶거나 업무에 도움 될 레시피를 찾는 중급 이상의 프로그래머에게 유용할 것이다.
이 책에서 다루는 내용
■ 매일 사용하기 좋은 새로운 데이터 형식에 익숙해지기
■ 자원을 잘 관리하기 위한 스마트 포인터 사용
■ 컴파일 시간 계산과 단언문 이해
■ 부스트 라이브러리로 다중 스레드 작성
■ 여러 작업을 동시에 실행하는 방법
■ 부스트 라이브러리를 사용한 일반 문자열 작업
■ 프로세스, 계산, 상호 작용을 작업으로 나눈 후 독립적으로 처리하기
■ 그래프, 스택 트레이스, 테스트와 프로세스 간 통신 기초
■ 컴파일러, 플랫폼, 부스트 버전을 알아내는 다양한 도우미 매크로 알아보기
이 책의 대상 독자
부스트를 더 알고 싶거나 애플리케이션 개발 과정을 단순하게 만들고 싶은 개발자에게 적합하며 C++와 STL의 기본 지식이 필요하다.
이 책의 구성
1장, ‘첫 애플리케이션 제작’에서는 일상적으로 쓰는 라이브러리를 알아본다. 다양한 곳에서 옵션 구성을 알아내고, 부스트 라이브러리를 만든 사람이 도입한 형식으로 무엇을 만들 수 있는지 살펴본다.
2장, ‘자원 관리’에서는 부스트 라이브러리에서 도입한 데이터 형식 중에서 포인터와 함께 사용하는 방법을 알아본다. 자원을 쉽게 관리하는 방법과 어떤 함수 객체, 함수 람다 표현식이라도 저장할 수 있는 데이터 형식을 사용하는 방법을 알아본다. 2장을 읽고 나면 좀 더 믿음직한 코드를 작성할 수 있으며, 더 이상 메모리 누수현상도 없을 것이다.
3장, ‘데이터 변환’에서는 문자열, 숫자와 사용자 정의 형식들을 서로 간에 어떻게 변환할 수 있는지 알아본다. 다형적 형식을 안전하게 형 변환하는 방법과 C++ 소스 파일 안에 작거나 큰 파서를 만들어 넣는 방법도 설명한다. 자주 혹은 드물게 사용하는 여러 가지 데이터 변환 방식도 알아본다.
4장, ‘컴파일 시간 트릭’에서는 컴파일 시간 검사와 알고리즘 성능 개선뿐 아니라 다른 메타프로그래밍 작업에 부스트 라이브러리를 사용하는 방법을 간단한 예제를 통해 알아본다. 4장을 이해하지 않고 부스트 소스코드나 다른 부스트와 유사한 라이브러리를 이해하기는 어려울 것이다.
5장, ‘다중 스레드’에서는 스레드의 모든 것을 다룬다.
6장, ‘작업 다루기’에서는 함수 객체를 작업으로 호출하는 방법을 알아본다. 6장의 핵심 주제는 작업 처리, 계산과 함수 객체(작업)사이의 상호작용 모두를 함자(작업)로 쪼갤 수 있고, 그 작업을 독립적으로 처리할 수 있다는 점이다. 소켓에서 데이터를 받거나 특정 시간까지 기다리는 등의 느린 연산들 때문에 막히지 않도록 콜백 작업을 제공한 후 다른 작업을 처리하는 방법을 알아본다. OS가 느린 연산을 처리하고 나면 콜백이 실행된다.
7장, ‘문자열 다루기’에서는 문자열을 바꾸고, 검색하고, 표현하는 다양한 방법을 알아본다. 부스트를 사용하면 일반적인 문자열 작업을 얼마나 쉽게 처리할 수 있는지도 살펴본다. 흔한 문자열 조작 작업을 해결해보자.
8장, ‘메타 프로그래밍’에서는 멋지지만 이해하기는 까다로운 메타프로그래밍 기법을 알아본다. 여러 개의 형식을 튜플과 유사한 하나의 형식으로 묶는 방법을 알아본다. 또한 형식 모음을 조작하기 위해 함수를 만들어보고, 컴파일 시간 모음 형식이 어떻게 바뀌는지 살펴본 후 컴파일 시간 기법을 실행 시간 기법과 함께 사용하는 방법을 알아본다.
9장, ‘컨테이너’에서는 부스트의 컨테이너를 다룬다. 일상적인 프로그래밍 작업에서 사용할 수 있고, 성능이 좋으며, 새로운 애플리케이션을 더 쉽게 만들 수 있게 하는 부스트 클래스를 살펴본다.
10장, ‘플랫폼과 컴파일러 정보 모으기’에서는 컴파일러, 플랫폼과 부스트 특성을 알아내는 다양한 도우미 매크로를 알아본다. 도우미 매크로는 부스트 라이브러리 자체에서도 널리 사용될 뿐 아니라, 어떠한 컴파일러 플래그에서도 동작할 수 있는 이식성 높은 코드를 만들기 위해서는 필수로 알아둬야 한다.
11장, ‘시스템 사용’에서는 파일 시스템을 자세히 살펴보고, 파일을 생성하고 삭제하는 방법을 알아본다. 서로 다른 시스템 프로세스끼리 데이터를 주고받는 방법과 가장 빠른 방식으로 파일을 읽는 방법을 비롯한 여러 기법도 알아본다.
12장, ‘부스트 라이브러리 살짝 맛보기’에서는 크기가 큰 라이브러리의 일부, 특히 라이브러리를 알아보기 위한 시작 지점이 될 만한 부분을 살펴본다.
목차
목차
- # 차례 #
- 1장. 첫 애플리케이션 제작
- 소개
- 옵션 구성 알아내기
- 컨테이너나 변수에 아무 값이나 저장
- 컨테이너나 변수에 선택한 여러 가지 형식 저장
- 여러 형식을 저장하는 컨테이너 안전하게 사용
- 실제 값 없이 값이나 플래그 반환
- 함수에서 배열 반환
- 여러 값을 하나로 연결
- 함수의 파라미터 값 묶기와 재정렬
- 사람이 읽기 편한 형식 이름 알아내기
- C++11 이동 에뮬레이션 사용
- 복사할 수 없는 클래스 생성
- 복사할 수는 없지만 이동은 할 수 있는 클래스 생성
- C++14와 C++11 알고리즘 사용
- 2장. 자원 관리
- 소개
- 영역을 벗어나지 않는 클래스에 대한 지역 포인터 관리
- 함수를 통해 접근하는 클래스에 대한 포인터의 참조 횟수 관리
- 영역을 벗어나지 않는 배열에 대한 포인터 관리
- 함수를 통해 접근하는 배열에 대한 포인터의 참조 횟수 관리
- 변수에 아무 함수 객체나 저장
- 변수에 함수 포인터 전달
- 변수에 C++11 람다 함수 전달
- 포인터 컨테이너
- 영역을 벗어날 때의 처리
- 파생 클래스의 멤버로 기본 클래스 초기화
- 3장. 데이터 변환
- 소개
- 문자열에서 숫자로 변환
- 숫자에서 문자열로 변환
- 숫자에서 숫자로 변환
- 사용자 정의 형식과 문자열 간 변환
- 스마트 포인터 변환
- 다형적 객체의 형 변환
- 간단한 입력 파싱
- 복잡한 입력 파싱
- 4장. 컴파일 시간 트릭
- 소개
- 컴파일할 때 크기 검사
- 정수 형식에 대해 함수 템플릿 사용하게 만들기
- 실수 형식에 대해 함수 템플릿 사용 못하게 만들기
- 숫자에서 형식 만들기
- 형식 특질 구현
- 템플릿 파라미터에 맞춰 최적인 연산자 선택
- 에서 C++03 표현식의 형식 알아내기
- 5장. 다중 스레드
- 소개
- 실행 스레드 생성
- 공통 자원에 대한 접근 동기화
- 원자 연산으로 공통 자원에 빠르게 접근
- work_queue 클래스 생성
- 다중-읽기-단일-쓰기 잠금
- 스레드가 개별적으로 갖는 변수 생성
- 스레드 인터럽트
- 스레드 그룹 다루기
- 공유 변수의 안전한 초기화
- 여러 뮤텍스 잠그기
- 6장. 작업 다루기
- 소개
- 임의의 데이터 형식을 처리하는 작업 등록
- 타이머를 만들고 타이머 이벤트를 작업으로 처리
- 네트워크 통신을 작업으로 처리
- 들어오는 접속 받아들이기
- 동시에 여러 작업 실행
- 파이프라인 작업 처리
- 잠금 없는 장벽 생성
- 예외를 저장하고 작업으로 생성
- 시스템 신호를 작업처럼 얻고 처리
- 7장. 문자열 다루기
- 소개
- 대소문자 바꾸기와 대소문자 구별 없이 비교
- 정규 표현식으로 문자열 일치 비교
- 정규 표현식으로 문자열 찾고 바꾸기
- Printf와 비슷하지만 안전한 함수로 문자열 형식 맞추기
- 문자열 바꾸고 지우기
- 두 반복자로 문자열 표현
- 문자열 형식에 대한 참조자 사용
- 8장. 메타프로그래밍
- 소개
- 형식의 벡터라는 형식 사용
- 형식의 벡터 다루기
- 컴파일할 때 함수의 결과형 알아내기
- 고차 메타함수 생성
- 메타함수 게으르게 계산
- 튜플 요소를 문자열로 변환
- 튜플 나누기
- C++14에서 이종 컨테이너 다루기
- 9장. 컨테이너
- 소개
- 시퀀스 컨테이너에 몇 가지 요소 저장
- 시퀀스 컨테이너에 최대 N개 요소 저장
- 엄청 빠른 문자열 비교
- 비정렬 집합과 맵 사용
- 값이 키이기도 한 맵 생성
- 다중 인덱스 컨테이너 생성
- 단일 연결 리스트와 메모리 풀의 장점
- 일차원 연결 컨테이너 사용
- 10장. 플랫폼과 컴파일러 정보 모으기
- 소개
- OS와 컴파일러 알아내기
- int128 지원 여부 알아내기
- RTTI가 지원되지 않는다면 건너뛰기
- 더 간단한 메소드 사용해 메타함수 만들기
- C++11에서 사용자 정의 형식의 성능은 높이고 코드 크기는 줄이기
- 이식 가능한 방식으로 함수와 클래스를 내보내고 불러들이기
- 부스트 버전 알아내고 최신 기능 가져오기
- 11장. 시스템 사용
- 소개
- 디렉터리 내의 파일 나열
- 파일과 디렉터리 생성과 삭제
- 플러그인 작성과 사용
- 백트레이스(현재 콜 시퀀스) 얻기
- 한 프로세스에서 다른 프로세스로 빠르게 데이터 옮기기
- 프로세스 간 통신 동기화
- 공유 메모리 안에서 포인터 쓰기
- 가장 빠르게 파일 읽기
- 코루틴: 상태를 저장한 후 실행을 잠시 미루기
- 12장. 부스트 라이브러리 살짝 맛보기
- 소개
- 그래프 써보기
- 그래프 보여주기
- 진짜 난수 생성기 사용
- 이식 가능 수학 함수 쓰기
- 테스트 생성
- 여러 테스트를 묶어 테스트 모듈로 생성
- 이미지 다루기