책소개
C++ 프로그래머를 위한 C++11 STL 가이드
C++은 아직도 건재하다. 프로그래밍 언어 순위를 보아도 2012년부터 2014년까지 4위를 유지하고 있다. 게임 개발에서도 C++는 주력 언어로 사용하고 있다. 대부분의 게임엔진(Gamebryo, Havok, FMOD, SpeedTree, Unreal) 또한 C++로 만들어졌다.
C++ 11은 2011년 8월에 발표된 C++ 프로그래밍 언어의 차세대 표준으로, 아직 실무에 완전히 적용되지는 않았지만, 활용도가 점점 높아지고 있는 프로그래밍 언어다. 현재 대부분 플랫폼에서 100%는 아니라도 꽤 높은 수준으로 C++11을 지원하므로 새로운 표준에 맞게 C++11에 기반을 두고 프로그래밍하는 것이 좋다. 그리고 STL은 C++의 '표준 템플릿 라이브러리'로 일반적으로 많이 사용하는 자료구조나 알고리즘을 모은 라이브러리다. STL을 사용하면 프로그래밍 시간이 많이 단축할 수 있어서 C++ 프로그래밍 능력을 높이기 위해 꼭 알아야 할 기능이다.
이 책은 『Think About: C++11 STL 프로그래밍』(한빛미디어, 2013년 10월)의 개정판으로, 기존 도서가 출간된 후 독자 리뷰를 통해 들어온 요청 사항을 반영하고 초판에서 다루지 않았던 srting, 난수, 알고리즘 등의 내용을 추가하였다.
초판에서 사용한 C++ 도구인 VS(Visual Studio) 2012는 이후 VS 2013이 나왔지만, 아직 C++11의 모든 기능을 다 지원하지 못하고 있다. 그래서 VS를 통해 C++11의 모든 기능을 설명하기가 어려웠는데, 이런 문제를 해결하기 위해 개정 2판에서는 온라인 컴파일러 사용법을 소개한다. 온라인 컴파일러를 사용하면 VS나 Windows 개발자에게 설치가 간단하지 않은 Clang, gcc를 설치하지 않고도 아주 쉽게 컴파일러를 사용해 볼 수 있다.
[지은이] 최흥배
2003년부터 현재에 이르기까지 PC 보드 게임부터 MMORPG, 모바일 게임을 아우르는 다양한 온라인 게임 서버 프로그램을 만들어온 개발자다. 게임 개발자로서 프로그래밍 언어 중 C++를 주 언어로, C#을 보조 언어로 사용하고 있다(그러나 최근에는 모바일 게임 서버 개발에 C#을 더 많이 사용하고 있다). 요즘은 C++11/14 프로그래밍과 심도 있는 .NET 기술, 유명 백엔드 오픈 소스 라이브러리 및 프로그램, 프로그래밍 언어 Ruby와 Scala에 대해 공부하고 있다. 기술과 개발 경험을 여러 사람과 나누는 것을 좋아하여 게임 개발자 커뮤니티나 세미나 강연을 통해 다른 프로그래머와 활발히 교류하고 있다. 웹이 대중화되기 전부터 프로그래밍 공부를 해 와서 그런지 여전히 새로운 기술을 배울 때는 책을 선호하여 지금도 매달 새로운 프로그래밍 관련 책을 읽으며 연구하고 있다. 현재 T3엔터테인먼트(http://www.t3.co.kr) 모바일 1팀에서 모바일 게임 서버 플랫폼을 개발 중이다.
목차
01 C++11 기초
1.1 auto
1.2 람다
1.3 range based for
1.4 enum
1.5 nullptr
02 메모리 관리
2.1 shared_ptr
2.2 unique_ptr
03 tuple
3.1 tuple이 필요할 때
3.2 tuple 사용하기
3.3 더 간단하게 tuple 정의하기
3.4 tuple에 저장한 데이터 개수 알기
3.5 tuple의 요소를 한꺼번에 다른 변수에 담기
3.6 tuple과 tuple 합치기
04 array
4.1 array 사용하기
4.2 요소 접근
4.3 array의 크기 알기
4.4 fill을 사용하여 특정 값 채우기
05 forward_list
5.1 forward_list를 만든 이유
5.2 forward_list 사용하기
5.3 데이터 추가하기
5.4 데이터 삭제하기
5.5 정렬
5.6 중복 제거
5.7 합치기
06 unordered_map
6.1 unordered_map 사용하기
6.2 데이터 추가와 삭제
6.3 검색
6.4 검색 - 없으면 추가하기
6.5 클래스(혹은 구조체)를 key로 사용하기
07 chrono
7.1 chrono 사용하기
7.2 시간 단위
7.3 시간 연산
7.4 clock 클래스
08 std::thread
8.1 스레드 만들기
8.2 스레드가 종료될 때까지 기다리기
8.3 스레드 식별자와 스레드 교환
8.4 스레드 떼어내기와 스레드 종료 대기 가능 조사
8.5 하드웨어 스레드 개수 알기
8.6 스레드 일시 중지 및 양보하기
8.7 thread 객체를 join이나 detach하지 않고 파괴했을 때
09 동기화 객체
9.1 공유 객체 동기화하기
9.2 자동으로 락 풀기
9.3 반복하여 락 걸기
9.4 지정한 시간 동안만 락 시도하기
9.5 unique_lock
9.6 복수의 mutex 객체를 동시에 락 걸기
9.7 프로그램에서 딱 한 번만 실행하기
9.8 스레드마다 데이터 저장하기
9.9 이벤트를 사용한 동기화 객체
9.10 스레드 대기
10 std::atomic
10.1 lock-free로 공유 자원 조작하기
10.2 초기화와 읽고 쓰기
10.3 연산 조작
10.4 바꾸기와 비교 후 바꾸기
11 async/future
11.1 함수를 비동기로 실행하기
11.2 std::thread에서 비동기로 함수 실행
11.3 비동기 task
12 string
12.1 사용하기
12.2 문자열 길이 조작
12.3 문자열 접근
12.4 문자열 변경
12.5 문자열 비교
12.6 문자열 복사
12.7 문자열 검색
12.8 문자열 일부 복사
12.9 문자열 변환
12.10 hash
13 난수
13.1 사용하기
13.2 시드 값을 사용한 난수 생성
13.3 예측 불가능한 난수 생성
13.4 일정 범위 안의 난수 생성
13.5 일정 확률로 난수 생성
13.6 성공 횟수 확률
13.7 정규 분포
13.8 기본 난수 생성기
14 알고리즘
14.1 컨테이너 요소들의 조건 검사
14.2 조건에 맞는 요소만 복사하기
14.3 원하는 개수만큼 요소 복사하기
14.4 조건에 맞지 않는 요소 찾기
14.5 요소를 두 집단으로 나누기
14.6 요소들의 구분 조사
14.7 정렬 여부 조사
14.8 Heap 사용 여부 조사
14.9 요소를 연속적인 값으로 채우기
14.10 최소값과 최고값 찾기
15 기타
15.1 통일된 초기화 구문
15.2 멤버 변수 초기화
15.3 생성자에서 다른 생성자 호출하기
15.4 함수의 delete 지정
15.5 override와 final
15.6 Template Aliases
15.7 ref
15.8 function
15.9 mem_fn
15.10 system_error
15.11 std::next, std::prev, std::begin, std::end
부록