아크로폴리스

제목C++ 추천 서적 (깉허브 출처 번역글)2019-07-20 20:53:10
작성자

오리지널 링크

초보자

입문서. 기존에 프로그래밍 경험 X

  • C++ Primer * (Stanley Lippman, Josée Lajoie, and Barbara E. Moo) (C++11 수록) 1000 페이지 정도 되는 장서로, C++에 대해 전체적으로 이해하고 입문할 수 있는 책임. 설명도 잘 되어 있고, 난이도도 적당함. 5판부터는 C++11와 같은 모던 C++도 다룬다. [Review]

  • Programming: Principles and Practice Using C++ (Bjarne Stroustrup, 2nd Edition - May 25, 2014) (C++11/C++14 수록) 그 누구도 아닌 C++의 창시자가 직접 작성한 입문서. 근데, 진짜 생초짜들을 위한 책이다. 프로그래밍 처음 접해보는 분들이 읽으면 좋을 듯 ^^

* C++ Primer Plus (Stephen Prata)라는 책과 혼동하지 마시길.. 이 그리 좋지는 않다.

입문서, 프로그래밍 유 경험자

  • A Tour of C++ (Bjarne Stroustrup) (2판부터는 C++17 수록) 여기서 말하는 "투어"는 정말 짧은 수준임. 무려 180 페이지에 14개라는 적은 챕터들... 표준 C++(C++이랑 STL, 그리고 C++11)을 이미 C++을 알고 있는 사람들을 위해 간단하게 다루는 책임. C++ Programming Language, 4판(동일 저자)의 2-5 챕터의 연장 버전이라고 생각하면 편하다.

  • Accelerated C++ (Andrew Koenig and Barbara Moo, 1st Edition - August 24, 2000) C++ Primer랑 비슷한데 또 그만의 매력이 있음. 완전 프로그래밍 입문서는 아니고, 이미 프로그래밍 경험이 있는 사람들을 대상으로 작성한 C++ 입문서다. 그래서 다른 책들보다 난이도가 좀 높은 편인데, 이 부분만 감당 가능하다면 상당히 좋은 책. (C++ 입문서의 현대적 교육방식을 처음으로 제시한 책이기도 하다) 단점이 있다면, C++98을 가르친다는 점. [Review]

실제 연습용

  • Effective C++ (Scott Meyers, 3rd Edition - May 22, 2005) 이 책의 목표는 C++ 프로그래머가 두 번째로 반드시 읽어야 할 책이 되는 것이다. 초판은 C 프로그래머를 대상으로 작성되었는데, 추후 3판과 같은 최근 판들은 Java같은 언어 출신들을 위해 작성되어있음. 책의 구성은 50가지 간단하게 코딩하는데 유용한 노하우와 꿀팁들을 나열한 것으로 되어있고, 그 근거들도 나름 논리적이고 읽기 쉽게 적혀있다. C++랑 C++14같은 모던 C++의 경우 솔직히 좀 책 자체가 오래됐으니까 차라리 Effective Modern C++를 읽는 게 낫다. [Review]

  • Effective Modern C++ (Scott Meyers) Effective C++의 요즘 버전. C++03에서 C++11랑 C++14로 넘어가려는 프로그래머들을 위해 작성됨.

  • Effective STL (Scott Meyers) 위에 Effective C++와 같은 책들처럼 STL을 가르치려고 한다. 구성도 똑같음. 몇 가지 노하우, 꿀팁들 나열하고 논리적 근거 댐. [Review]

중급자

  • More Effective C++ (Scott Meyers) Effective C++에서 노하우랑 꿀팁 더 추가된 책. 첫번째 책만큼 엄청 중요하지는 않은데, 그래도 나름 알아두면 유용한 꿀팁들 많이 적혀있다.

  • Exceptional C++ (Herb Sutter) 예제가 많다. 특히 C++의 RAII(Resource Acquisition is Initialization)을 통한 리소스 관리나 예외처리 같은 부분에 대해 매우 구체적이고 훌륭한 설명을 해주는 책. [Review]

  • More Exceptional C++ (Herb Sutter) Exceptional C++에서 다루지 않았던 추가적인 예외처리를 다룬다. C++의 객체지향성이랑 STL의 올바른 사용법에 대해서 다룬다. [Review]

  • Exceptional C++ Style (Herb Sutter) 제네릭 프로그래밍, 최적화, 리소스 관리 등을 다룬다. 또한 C++ 코드를 non-member 함수랑 single responsibility principle을 통해 모듈화되게 작성하는 방법을 알려준다. [Review]

  • C++ Coding Standards (Herb Sutter and Andrei Alexandrescu) "코딩의 정석"이라고 흔히 부르는데, 여기서 얘기하는 정석은 "코드를 indent할 때 얼마나 많이 스페이스바를 눌러야 하는가?"와 같은 정석이 아니다. 코딩의 정석에서는 101가지 정석을 다루는데, 이 정석들은 노하우, 관용구, 꿀팁, 흔히들 하는 실수 등을 나열해서 정확하고, 이해하기 쉬우며 효율적인 C++ 코드를 작성하는데 도움을 주는 주제들임. [Review]

  • C++ Templates: The Complete Guide (David Vandevoorde and Nicolai M. Josuttis) C++11이 존재하기 이전 최고의 템플릿 책이다. 기초부터 상당히 고급진 템플릿 메타프로그래밍까지 광범위하게, 그리고 구체적으로 템플릿이 어떻게 작동하는지 가르쳐 준다. 개념 부분이나 실습 예제나 둘 다 훌륭함. 또한 흔히 하는 실수들같은 것도 쭉 알려줌. ODR(One Definition Rule)에 대한 설명도 매우 훌륭하고 오버로드 해결방법같은 것도 많음. 2판에선 C++11, C++14, C++17같은 모던 C++도 다룬다. [Review]

  • C++ 17 - The Complete Guide (Nicolai M. Josuttis) C++17 표준에서 새롭게 소개된 새로운 기능들 등을 소개한다. 심지어 inline 변수, constexpr if 같이 간단한 거부터 폴리모픽 메모리 관리랑 overaligned된 데이터를 통한 new와 delete과 같은 복잡한 개념까지 다 다룬다.


고급

  • Modern C++ Design (Andrei Alexandrescu) 고급 제너릭 프로그래밍 기술들을 가르치는 책. policy 기반 디자인, 타입 리스트, 제너릭 프로그래밍의 핵심 관용구 등을 통해 수많은 유용한 디자인 패턴들(small object allocator, functor, factory, visitor, multi-method 등)을 가르치고, 이를 어떻게 효율적으로, 모듈적으로, 그리고 깔끔하게 사용할 수 있는지 알려준다. [Review]

  • C++ Template Metaprogramming (David Abrahams and Aleksey Gurtovoy)

  • C++ Concurrency In Action (Anthony Williams) C++11의 기능들(스레드 라이브러리, atomics 라이브러리, C++ 메모리 모델, locks & mutexes 등) 및 멀티스레드 프로그램의 디자인과 디버그에 대해 다룬다.

  • Advanced C++ Metaprogramming (Davide Di Gennaro) C++11 나오기 이전에 나온 TMP 기술에 대한 매뉴얼. 이론보다는 실습에 집중한 책이다. 책을 읽어보면 예제들이 엄청나게 많다. 몇몇 예제들은 모던 C++로 해결되거나 이제는 안 쓰는 기술들은 있지만 그래도 알아두면 좋긴 함. 책 구성 방식이 좀 ㅄ같긴한데, 이것만 괜찮다면 Alexandrescu의 Modern C++ Design보다 더 좋은 책임. 좀 C++ 좀 다뤄본 개발자라면 개발자로서 공감하는 C++의 어두운 면모를 좀 더 이해할 수 있을 것.


참고서적 - 입문 ~ 고급

C++11/14/17/… 참고서적:

  • The C++11/14/17 Standard (INCITS/ISO/IEC 14882:2011/2014/2017) 사실상 모던 C++의 참고서적 그 자체. 근데 경험 많은 개발자들을 대상으로 작성된 참고서적이니까... 이해하는데 시간이 좀 걸릴 수도 있다. C++17 표준은 종이가 아니라 디지털폼으로 198 스위스프랑에 판매한다...

  • C++17 표준이 솔직히 가격이 창렬이다. – ISO 직구 버전은 198 스위스 프랑 (24만원)이니까... 사실 대부분의 사람들한테는 24만원 쓸 바엔 C++17 표준의 마지막 초안을 보는 것을 추천한다. 내용도 대충 다 있고 일단 "공짜"다. 심지어 더 최신 초안을 선호하는 사람들도 있는데, C++20 때문에 그런 듯

  • Overview of the New C++ (C++11/14) (PDF only) (Scott Meyers) (C++14 포함) C++ 유명 작가 Scott Meyers가 진행한 3일짜리 트레이닝 강의의 강의 슬라이드. 시간이 시간인지라 내용이 엄청 많지는 않은데, 퀄리티가 ㅎㄷㄷ하다.

  • C++ Core Guidelines (C++11/14/17/…) (Bjarne Stroustrup and Herb Sutter 수정) 온라인 다큐먼트. 모던 C++을 사용하는데 필요한 가이드라인이다. 난이도는 좀 높다. 인터페이스, 리소스 관리, 메모리 관리, concurrency affecting app 아키텍쳐, 라이브러리 디자인 등과 같은 좀 고급진 주제를 다룬다. 위 가이드라인 프로젝트는 Bjarne Stroustrup외 기타 몇몇이 CppCon'15에서 발표했다. 물론 여기에 속해있지 않더라도 기여할 수 있으니 참고. 대부분의 가이드라인은 논리적인 근거들, 예제들 및 툴들에 대해 구체적으로 논하고 있다. 대부분의 가이드라인들은 static analytic tool에 의해 자동으로 확인할 수 있게 디자인되었다.

  • C++ Super-FAQ (Marshall Cline, Bjarne Stroustrup and others) 은 Standard C++ Foundation에서 지금까지 Marshall Cline and Bjarne Stroustrup 등과 같은 사람들이 갖고 있는 FAQ(자주 묻는 질문)들을 집대성한 FAQ이다. 대부분 중급 이상의 난이도고, 글도 좀 유머러스하게 작성된 것이 많다. 아직 모던 C++까지 다루는 수준은 아닌 듯 하다.

  • cppreference.com (C++03/11/14/17/…) (initiated by Nate Kohl) 언어의 기본 코어와 STL에 대한 위키. C++의 공식 자료보다 상당히 정확하고 읽기 편하고 위키이니만큼 검색이나 돌아다니는 것도 훨씬 낫다. C++의 모든 표준을 다루고 있고, 특정 표준만을 집중해서 읽게해주는 기능도 있다. Nate Kohl이 CppCon'14에서 발표한 프로젝트다.


고전 / 좀 오래된 책

Note: 고전 내용들은 솔직히 좀 도태된 감이 없잖아 있다... ;(

  • The Design and Evolution of C++ (Bjarne Stroustrup) 언어가 이렇게 생겼는지에 대한 질문. C++의 표준화 이전의 내용까지도 다룬다;;

  • Ruminations on C++ - (Andrew Koenig and Barbara Moo) [Review]

  • Advanced C++ Programming Styles and Idioms (James Coplien) C++ 디자인 패턴의 선구자 격. C++에서 유용하게 사용할 수 있는 "관용구"들을 다룬다. 좋은 책이고, 시간 날 때 한 번 읽어보면 좋다. 근데 솔직히 좀 너무 오래되긴 함. 이젠 교양 서적인 듯.

  • Large Scale C++ Software Design (John Lakos) 이 책에서 저자는 큰 규모의 C++ 프로젝트에서 이용하는 기술들을 설명해준다. 좋은 책이긴 한데 이제 출판된지 시간이 꽤나 지났다. C++98 이전에 작성된 거라서 namespace 같은 기능들도 없다... 물론 나중에 대기업 가거나 좀 대규모 프로젝트하면 읽어봐도 나쁘지는 않다. 모던 C++을 다루는 신 버전이 출판 대기 중이다....

  • Inside the C++ Object Model (Stanley Lippman) 버추얼 멤버 함수를 보통 어떤 식으로 사용하는지, 기본 오브젝트가 다중상속 상황에서 어떻게 메모리에 할당되는지, 이러한 모든 것이 퍼포먼스에 어떤 영향을 주는 지 등등... 이런 분야에 관심이 있다면, 읽어봐도 나쁘지 않다.

  • The Annotated C++ Reference Manual (Bjarne Stroustrup, Margaret A. Ellis) 1989년에 나온 C++ 2.0 버전을 다루는 상당히 오래된... 책이다. 템플릿, 예외처리, 네임스페이스, 캐스팅 등도 없을 때 나온 책이다... 그래도 어쨋든 C++ 표준을 설명해주고, 차후에 등장할 만한 개념이나 기능들을 언급하기도 한다. C++ 언어 자체를 배우거나 방법론 / 디자인 패턴 등을 배우는 책은 아니고, C++의 진정한 덕후가 되기 위한 책이다.

  • Thinking in C++ (Bruce Eckel, 2nd Edition, 2000). 상하로 이루어진 책; 심지어 ​무료​다. 튜토리얼 식으로 되어있다. 링크: 상편, 하편. 무료라서 그런지는 몰라도, 몇 가지 좀 실수들이 있다.심지어 공식적으로 나온 수정본이나 수정사항을 나열한 리스트도 없다. 물론 다른 사람들이 만들어 놓은 링크는 있는데, 버려진 지 오래된 사이트다.(http://www.computersciencelab.com/Eckel.htm)

  • Mastering the C++17 STL (Arthur O'Dwyer, 1st Edition, 2017). 이해하기도 쉽고, 가르치기도 쉬운 책이다. 이 책을 읽으려면 사실 엉덩이가 좀 무거워야 한다. 간단한 C++17 STL 참고서적이 아니고, 고전 폴리모피즘 vs 제네릭 프로그램, 이터레이터, 레인지, 컨테이너, vocabulary 타입, 스마트포인터, concurrency, allocator, io 스트림, 표준식, random number 및 파일시스템 등과 같이 광범위하게 다룬다.

  • Scientific and Engineering C++: An Introduction to Advanced Techniques and Examples (John Barton and Lee Nackman) C++의 모든 기능을 최대한 설명하고, 특히 수학 분야에서 사용하는 상당히 광범위하고 구체적인 책이다. CRTP, 혹은 Barton-Nackman trick으로 알려진 Curiously Recurring Template Pattern과 같은 기술들을 소개한다. 차원분석이나 자동미분과 같은 혁신적인 기술들도 소개한다. 상당히 많은 컴파일 가능하면서 유용한 코드들을 소개한다. 예를 들어 파서나 lapack wrapper 등이 있다. 코드는 다음 링크에서 구해볼 수 있다. http://www.informit.com/store/scientific-and-engineering-c-plus-plus-an-introduction-9780201533934. 물론 사실 C++ 계에서 스타일이나 기능면에서도 좀 오래되긴 했다. 물론 1994년, STL 이전의 C++의 향기를 느껴볼 수 있는 책이다. 특히 동적상속에 대한 챕터는 좀 어렵게 써있기도 하고, 유용하지도 않다. 좀 최신화된 버전이 존재한다면 괜찮을지도.

댓글
자동등록방지
(자동등록방지 숫자를 입력해 주세요)