책 제목 : 전문가를 위한 C++ (개정4판)
저자 : 마크 그레고리
옮김 : 남기혁
출판년도 : 2019.08.20
컴퓨터 공대생으로서 가장 먼저 접한 언어가 C, C++ 이었다.
그것이 계기가 되어 중간에 수많은 언어를 거치면서도 C++이 가장 편한 언어가 되었다.
C++이라는 언어는 재미있고 유쾌하며 동적이고 때로는 너무 복잡해서 머리를
욱씬거리게 만드는 언어였다.
실제로 C++는 프로그래밍 점유율을 볼때 늘 순위권에 있다.
C++은 C라는 절차적 언어에 객체지향이라는 개념을 얹고 일반화 프로그래밍이라는 개념을
더한 실용적인 언어라고 생각한다.
책의 목차는 아래 "목차열기"를 참조.
[Part 1 전문가를 향한 C++의 첫걸음]
CHAPTER 1 C++와 표준 라이브러리 초단기 속성 코스
_1.1 C++의 기초
_1.2 C++의 고급 기능
_1.3 C++의 객체지향 언어 특성
_1.4 유니폼 초기화
_1.5 표준 라이브러리
_1.6 첫 C++ 프로그램
_1.7 정리
CHAPTER 2 스트링과 스트링 뷰 다루기
_2.1 동적 스트링
_2.2 정리
CHAPTER 3 코딩 스타일
_3.1 코딩 스타일의 중요성
_3.2 코드 문서화
_3.3 코드 분할
_3.4 명명 규칙
_3.5 언어의 기능에 스타일 적용하기
_3.6 포매팅
_3.7 스타일과 관련하여 해결할 문제
_3.8 정리
[Part 2 전문가답게 C++ 소프트웨어 디자인하기]
CHAPTER 4 전문가다운 C++ 프로그램 디자인
_4.1 프로그램 디자인의 정의
_4.2 프로그램 디자인의 중요성
_4.3 C++에 적합한 디자인 방법
_4.4 C++ 디자인에 관련된 두 가지 원칙
_4.5 코드 재사용
_4.6 체스 프로그램 디자인
_4.7 요약
CHAPTER 5 객체지향 디자인
_5.1 절차형 사고방식
_5.2 객체지향 철학
_5.3 객체의 관점에서 바라보기
_5.4 객체 관계
_5.5 추상화
_5.6 요약
CHAPTER 6 재사용을 고려한 디자인
_6.1 재사용 철학
_6.2 코드를 재사용할 수 있도록 디자인하는 방법
_6.3 요약
[Part 3 전문가답게 C++ 코딩하기]
CHAPTER 7 메모리 관리
_7.1 동적 메모리 다루기
_7.2 배열과 포인터의 두 얼굴
_7.3 로우레벨 메모리 연산
_7.4 스마트 포인터
_7.5 흔히 발생하는 메모리 문제
_7.6 요약
CHAPTER 8 클래스와 객체 숙달하기
_8.1 스프레드시트 예제
_8.2 클래스 작성 방법
_8.3 객체의 라이프 사이클
_8.4 요약
CHAPTER 9 클래스와 객체 마스터하기
_9.1 friend
_9.2 객체에 동적 메모리 할당하기
_9.3 메서드의 종류
_9.4 데이터 멤버의 종류
_9.5 중첩 클래스
_9.6 클래스에 열거 타입 정의하기
_9.7 연산자 오버로딩
_9.8 안정된 인터페이스 만들기
_9.9 요약
CHAPTER 10 상속 활용하기
_10.1 상속을 이용한 클래스 구현
_10.2 코드 재사용을 위한 상속
_10.3 부모를 존중하라
_10.4 다형성을 위한 상속
_10.5 다중 상속
_10.6 상속에 관련된 미묘하면서 흥미로운 문제들
_10.7 요약
CHAPTER 11 C++의 까다롭고 유별난 부분
_11.1 레퍼런스
_11.2 키워드 혼동
_11.3 타입과 캐스팅
_11.4 스코프
_11.5 어트리뷰트
_11.6 사용자 정의 리터럴
_11.7 헤더 파일
_11.8 C 유틸리티
_11.9 요약
CHAPTER 12 템플릿으로 제네릭 코드 만들기
_12.1 템플릿 소개
_12.2 클래스 템플릿
_12.3 함수 템플릿
_12.4 변수 템플릿
_12.5 요약
CHAPTER 13 C++ I/O 완전 분석
_13.1 스트림 사용법
_13.2 스트링 스트림
_13.3 파일 스트림
_13.4 양방향 I/O
_13.5 요약
CHAPTER 14 에러 처리하기
_14.1 에러와 예외
_14.2 익셉션 처리 과정
_14.3 익셉션과 다형성
_14.4 익셉션 다시 던지기
_14.5 스택 풀기와 청소
_14.6 익셉션 처리 과정에서 흔히 발생하는 문제
_14.7 모두 합치기
_14.8 요약
CHAPTER 15 C++ 연산자 오버로딩하기
_15.1 연산자 오버로딩 개요
_15.2 산술 연산자 오버로딩하기
_15.3 비트 연산자와 논리 연산자 오버로딩하기
_15.4 스트림 입출력 연산자 오버로딩하기
_15.5 인덱스 연산자 오버로딩하기
_15.6 함수 호출 연산자 오버로딩하기
_15.7 역참조 연산자 오버로딩하기
_15.8 변환 연산자 구현하기
_15.9 메모리 할당과 해제 연산자 오버로딩하기
_15.10 요약
CHAPTER 16 C++ 표준 라이브러리 둘러보기
_16.1 코드 작성법
_16.2 C++ 표준 라이브러리 둘러보기
_16.3 요약
CHAPTER 17 컨테이너와 반복자 살펴보기
_17.1 컨테이너 개요
_17.2 순차 컨테이너
_17.3 컨테이너 어댑터
_17.4 정렬 연관 컨테이너
_17.5 비정렬 연관 컨테이너(해시 테이블)
_17.6 기타 컨테이너
_17.7 요약
CHAPTER 18 표준 라이브러리 알고리즘 마스터하기
_18.1 알고리즘 개요
_18.2 std::function
_18.3 람다 표현식
_18.4 함수 객체
_18.5 표준 라이브러리 알고리즘 심층 분석
_18.6 알고리즘 예제: 선거인 명부 검사
_18.7 요약
CHAPTER 19 스트링 현지화와 정규 표현식
_19.1 현지화
_19.2 정규 표현식
_19.3 요약
CHAPTER 20 여러 가지 유틸리티 라이브러리
_20.1 ratio 라이브러리
_20.2 chrono 라이브러리
_20.3 무작위수 생성
_20.4 optional
_20.5 variant
_20.6 any
_20.7 tuple
_20.8 파일시스템 지원 라이브러리
_20.9 요약
[Part 4 C++ 고급 기능 마스터하기]
CHAPTER 21 표준 라이브러리 커스터마이즈 및 확장
_21.1 할당자
_21.2 스트림 반복자
_21.3 반복자 어댑터
_21.4 표준 라이브러리 확장하기
_21.5 요약
CHAPTER 22 고급 템플릿
_22.1 템플릿 매개변수에 대한 심화 학습
_22.2 클래스 템플릿 부분 특수화
_22.3 오버로딩으로 함수 템플릿 부분 특수화 흉내내기
_22.4 템플릿 재귀
_22.5 가변 인수 템플릿
_22.6 메타프로그래밍
_22.7 요약
CHAPTER 23 C++ 멀티스레드 프로그래밍
_23.1 들어가며
_23.2 스레드
_23.3 아토믹 연산 라이브러리
_23.4 상호 배제
_23.5 조건 변수
_23.6 promise와 future
_23.7 멀티스레드 Logger 클래스 예제
_23.8 스레드 풀
_23.9 바람직한 스레드 디자인과 구현을 위한 가이드라인
_23.10 요약
[Part 5 C++ 소프트웨어 공학]
CHAPTER 24 소프트웨어 공학 기법
_24.1 프로세스의 필요성
_24.2 소프트웨어 라이프 사이클 모델
_24.3 소프트웨어 공학 방법론
_24.4 나만의 프로세스와 방법론 만들기
_24.5 소스 코드 관리
_24.6 요약
CHAPTER 25 효율적인 C++ 코드 작성법
_25.1 성능과 효율성에 대하여
_25.2 언어 차원의 효율성
_25.3 디자인 차원의 효율성
_25.4 프로파일링
_25.5 요약
CHAPTER 26 테스트 숙달하기
_26.1 품질 관리
_26.2 단위 테스트
_26.3 하이레벨 테스트
_26.4 성공적인 테스트를 위한 팁
_26.5 요약
CHAPTER 27 디버깅 완전 정복
_27.1 디버깅 기본 원칙
_27.2 버그 분류
_27.3 버그 방지
_27.4 버그 대비
_27.5 정적 어서션
_27.6 디버깅 테크닉
_27.7 요약
CHAPTER 28 디자인 기법과 프레임워크
_28.1 흔히 사용하지만 까먹기 쉬운 문법
_28.2 고급 기법
_28.3 객체지향 프레임워크
_28.4 요약
CHAPTER 29 디자인 패턴
_29.1 반복자 패턴
_29.2 싱글턴 패턴
_29.3 추상 팩토리 패턴
_29.4 프록시 패턴
_29.5 어댑터 패턴
_29.6 데코레이터 패턴
_29.7 책임 사슬 패턴
_29.8 옵저버 패턴
_29.9 요약
CHAPTER 30 크로스 플랫폼과 크로스 언어 애플리케이션 개발 방법
_30.1 크로스 플랫폼 개발
_30.2 크로스 언어 개발
_30.3 요약
[부록 A] C++ 면접 예상 질문
[부록 B] 참고 문헌
[부록 C] 표준 라이브러리 헤더 파일
[부록 D] UML 기초
책의 내용...
책은 총 30개의 챕터로 이루어져 있고 다방면에 걸쳐 이야기하고 있다.
대략 5개의 파트로 이루어져 있는데 아래와 같다.
1. 전문가를 향한 C++ 첫걸음
2. 전문가답게 C++ 소프트웨어 디자인하기
3. 전문가답게 C++ 코딩하기
4. C++ 고급 기능 마스터하기
5. C++ 소프트웨어 공학
Part 1은 역시 기본적인 내용을 담고있다.
C++ 기초내용부터 시작해서 C++의 특징, 객체지향, 스트링, 코딩스타일등.
코딩스타일과 코드 문서화를 보면 실무나 협업에 있어 필요한 부분이라고 생각한다.
Part 2는 C++ 철학에 대한 내용이 주를 이룬다.
절차형 사고방식과 C++의 특징인 객체지향 철학과 객체지향 관점, 객체와 추상화등.
이러한 개념을 가지고 프로그램을 어떻게 디자인 해야 하는가에 대한 이론이다.
Part 3은 C++사용에 중점을 두고 설명한다.
메모리관리를 위해 배열, 포인터, 메모리 연산, 스마트 포인터 등에 대해 언급하고
C++의 특징인 클래스와 객체를 사용하는 법에 대해 설명한다.
이 객체를 활용하기 위해 추상화 상속 등을 설명하고C++을 프로그래밍 할때
필요한 팁들을 설명한다.
C++의 특징중 하나인 템플릿 사용법과 스트림 사용법, 에러 및 예외처리,
연산자 오버로딩등 C++ 실제 코딩을 할 때 많이 사용되는 부분에 대해 언급한다.
그리고 책 표지에도 적혀있듯이 표준라이브러리에 대해서도 간단히 설명하고
컨테이너, 람다, 알고리즘, 정규표현식, 라이브러리 등을 활용하는 부분에 대해서도 간단히 설명한다.
Part 4는 C++을 좀 더 활용하는 단계에 대해 설명한다.
표준 라이브러리를 원하는 만큼 커스터마이징 하고 템플릿을 좀 더 적극적으로 활용하는법,
그리고 C++을 사용한 멀티스레드 프로그래밍에 대해 설명한다.
Part 5에서는 소프트 웨어 공학의 관점에서 접근한다.
프로세스, 방법론, 성능, 효율, 프로파일링, 테스팅, 디버깅 등 실제적으로
하나의 프로그램을 완성하기 위해 필요한 기술들에 대해 다룬다.
그리고 한때 유행했던 디자인 패턴에 대해서도 유효한 것들만 간단히 다루고
크로스 플랫폼 개발에 대해서도 언급한다.
책을 읽고나서...
책을 읽을 때는 목적이 있다.
이 책을 통해서 이 학문에 입문하고자 한다던지, 내가 가진 소양을 더욱 깊게 새긴다던지,
좀 더 유효한 노하우를 배우고 싶다던지, 가볍게 읽을만한 내용이라던지 등...
이 책은 입문자가 뜻을 두고 보기에는 내용이 쉽거나 친절하지 않고 범위또한 너무 넓다.
중급자가 읽기에는 너무 많은 범위를 다루다 보니 내용이 원하는 만큼 깊지가 않다.
개인적으로 C++ 입문자가 아닌 이가 C++에 대한 개요를 간략하게 돌아보기 위한 목적으로는
괜찮은 책인 것 같다.
링크
- 책 소개