나는 리뷰어다 2023_한빛미디어

[서평]전문가를 위한 C++(개정5판)

주식회사 올딩 2023. 4. 23.
728x90
반응형

C++를 다시 공부해야겠다 생각했다. AI의 급속한 발전으로 대용량 데이터 처리 및 복잡한 알고리즘을 다루는 데 속도와 효율성면에서 적합한 언어라고 생각하기 때문이다. AI가 발전할수록 C++은 더욱 중요한 역할을 할 것으로 보인다. 

이번에 C++ 공부를 시작할 때 9살 아들과 함께 하려한다. 나 또한 7살에 처음 배운 C언어가 있어 45살이 된 지금에도 컴퓨터 프로그래밍을 쉽게 생각할 수 있도록 만들어 준 계기였다고 생각한다. 아이들에게 가르쳐줄 첫 프로그래밍 언어로 C++을 선택했다. 

첫걸음이 중요하다고 생각한다. 전문가를 위한 C++(개정5판) C++20, 병렬 알고리즘, 파일시스템, 제네릭 람다, 디자인 패턴, 객체지향의 원리를 익히는 확실한 방법 학습을 통해 아이와 함께 성장할 수 있고 미래를 준비할 수 있는 유익한 시간이 되기를 희망해 본다. 

책소개

더 쉽게, 더 빠르게, 더 깔끔하게!

프로그래머가 알아야 할 C++와 C++20의 모든 것

 

C++는 마스터하기 어렵기로 악명 높지만, 풍부한 기능 덕분에 게임이나 상용 소프트웨어 애플리케이션을 개발하는 대표 언어로 자리매김했다. 숙련된 C++ 프로그래머조차 잘 모르는 고급 기능도 많은데, 최신 C++20이 나온 지금이야말로 C++의 모든 기능을 살펴볼 절호의 기회다.

『전문가를 위한 C++(개정 5판)』은 C++20에 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하므로 C++를 더 깊이 이해하려는 프로그래머에게 적합하다.

 

저자소개

마크 그레고리

벨기에 출신 소프트웨어 아키텍트로서 루벤 대학교에서 컴퓨터 과학과 인공지능 분야의 석사 과정을 우수한 성적으로 졸업했다. 소프트웨어 컨설팅 회사인 오디나 벨지움(Ordina Belgium)에서 컨설턴트로 근무하면서 지멘스와 노키아 지멘스 네트웍스에서 통신 시스템 운영자를 위한 솔라리스 기반 2G 및 3G 관련 소프트웨어 업무를 담당했다. 이 과정에서 남미, 미국, 유럽, 중동, 아프리카, 아시아를 비롯한 전 세계 출신의 개발자와 협업하는 경험을 했다. 현재 3D 형상 검사를 위한 정밀 광학 장비와 메트롤로지 솔루션을 공급하는 니콘 메트롤로지(www.nikonmetrology.com)에서 소프트웨어 아키텍트로 근무한다.

전문 분야는 C/C++이며 마이크로소프트 VC++와 MFC 프레임워크 경험이 풍부하다. 이와 관련하여 윈도우와 리눅스 플랫폼에서 하루 24시간, 7일 동안 구동하는 KNX/EIB 홈오토메이션 소프트웨어를 C++로 개발한 경험이 있다. C/C++ 외에도 C#과 PHP를 이용하여 웹 페이지를 제작하는 것을 즐긴다. VC++에 대한 전문성을 인정받아 2007년 4월부터 현재까지 매년 마이크로소프트 MVP로 선정됐다. 벨기에 C++ 사용자 그룹(www.becpp.org) 창립자, 『C++ Standard Library Quick Reference』(Apress) 공저자, 여러 출판사의 기술 편집자, 코드구루(CodeGuru) 포럼의 멤버(아이디 Marc G)이기도 하다. 개인 블로그(www.nuonsoft.com/blog)도 운영하고 있으며, 여행과 맛집 탐방을 즐긴다.

 

남기혁

고려대학교 컴퓨터학과에서 학부와 석사 과정을 마친 후 한국전자통신연구원에서 선임 연구원으로 재직하고 있다. 한빛미디어에서 『Make: 센서』(2015), 『메이커 매뉴얼』(2016), 『이펙티브 디버깅』(2017), 『리팩터링 2판』(2020), 『전문가를 위한 C++(4판)』(2019)을, 길벗에서 『핵심 C++ 표준 라이브러리(2판)』(2021), 『모던 C』(2022)를, 에이콘출판사에서 『Go 마스터하기』(2018), 『자율주행 자동차 만들기』(2019, 2022), 『스콧 애론슨의 양자 컴퓨팅 강의』(2021) 등을 번역했다.

 

목차

[PART I 전문가를 위한 C++ 첫걸음]

 

CHAPTER 1 C++와 표준 라이브러리 초단기 속성 코스

_1.1 C++의 기초

_1.2 어느 정도 규모 있는 첫 C++ 프로그램

_1.3 정리

_1.4 연습 문제

 

CHAPTER 2 스트링과 스트링 뷰 다루기

_2.1 동적 스트링

_2.2 스트링 포맷 지정

_2.3 정리

_2.4 연습 문제

 

CHAPTER 3 코딩 스타일

_3.1 코딩 스타일의 중요성

_3.2 코드 문서화

_3.3 코드 분해

_3.4 명명 규칙

_3.5 언어의 기능에 스타일 적용하기

_3.6 코드 서식

_3.7 스타일과 관련하여 해결할 문제

_3.8 정리

_3.9 연습 문제

 

[PART II 전문가다운 C++ 소프트웨어 설계 방법]

 

CHAPTER 4 전문가답게 C++ 프로그램 설계하기

_4.1 프로그램 설계의 정의

_4.2 프로그램 설계의 중요성

_4.3 C++에 적합한 설계 방법

_4.4 C++ 설계에 관련된 두 가지 원칙

_4.5 코드 재사용

_4.6 체스 프로그램 설계

_4.7 정리

_4.8 연습 문제

 

CHAPTER 5 객체지향 설계

_5.1 절차형 사고방식

_5.2 객체지향 철학

_5.3 클래스 세상에 살기

_5.4 클래스 관계

_5.5 정리

_5.6 연습 문제

 

CHAPTER 6 재사용을 고려한 설계

_6.1 재사용 철학

_6.2 코드를 재사용할 수 있도록 설계하는 방법

_6.3 정리

_6.4 연습 문제

 

[PART III 전문가답게 C++ 코딩하기]

 

CHAPTER 7 메모리 관리

_7.1 동적 메모리 다루기

_7.2 배열과 포인터의 두 얼굴

_7.3 로우레벨 메모리 연산

_7.4 흔히 발생하는 메모리 관련 문제

_7.5 스마트 포인터

_7.6 정리

_7.7 연습 문제

 

CHAPTER 8 클래스와 객체 이해

_8.1 스프레드시트 예제

_8.2 클래스 작성 방법

_8.3 객체의 라이프 사이클

_8.4 정리

_8.5 연습 문제

 

CHAPTER 9 클래스와 객체 완전 정복

_9.1 프렌드

_9.2 객체에 동적 메모리 할당하기

_9.3 메서드의 종류

_9.4 데이터 멤버의 종류

_9.5 중첩 클래스

_9.6 클래스에 열거 타입 정의하기

_9.7 연산자 오버로딩

_9.8 안정된 인터페이스 만들기

_9.9 정리

_9.10 연습 문제

 

CHAPTER 10 상속 활용하기

_10.1 상속을 이용한 클래스 구현

_10.2 코드 재사용을 위한 상속

_10.3 부모를 공경하라

_10.4 다형성을 위한 상속

_10.5 다중 상속

_10.6 상속에 관련된 미묘하면서 흥미로운 문제들

_10.7 캐스트

_10.8 정리

_10.9 연습 문제

 

CHAPTER 11 C++의 까다롭고 유별난 부분

_11.1 모듈

_11.2 헤더 파일

_11.3 언어 핵심 기능에 대한 테스트 매크로

_11.4 static 키워드

_11.5 C 유틸리티

_11.6 정리

_11.7 연습 문제

 

CHAPTER 12 템플릿으로 제네릭 코드 만들기

_12.1 템플릿 소개

_12.2 클래스 템플릿

_12.3 함수 템플릿

_12.4 변수 템플릿

_12.5 콘셉트

_12.6 정리

_12.7 연습 문제

 

CHAPTER 13 C++ I/O 심층 분석

_13.1 스트림 사용법

_13.2 스트링 스트림

_13.3 파일 스트림

_13.4 양방향 I/O

_13.5 파일시스템 지원 라이브러리

_13.6 정리

_13.7 연습 문제

 

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 사용자 정의 리터럴 연산자 오버로딩

_15.11 정리

_15.12 연습 문제

 

CHAPTER 16 C++ 표준 라이브러리 둘러보기

_16.1 코드 작성 원칙

_16.2 C++ 표준 라이브러리 둘러보기

_16.3 정리

_16.4 연습 문제

 

CHAPTER 17 반복자와 범위 라이브러리

_17.1 반복자

_17.2 스트림 반복자

_17.3 반복자 어댑터

_17.4 범위

_17.5 정리

_17.6 연습 문제

 

CHAPTER 18 표준 라이브러리 컨테이너

_18.1 컨테이너 개요

_18.2 순차 컨테이너

_18.3 컨테이너 어댑터

_18.4 정렬 연관 컨테이너

_18.5 비정렬 연관 컨테이너 - 해시 테이블

_18.6 기타 컨테이너

_18.7 정리

_18.8 연습 문제

 

CHAPTER 19 함수 포인터, 함수 객체, 람다 표현식

_19.1 함수 포인터

_19.2 메서드 및 데이터 멤버를 가리키는 포인터

_19.3 std::function

_19.4 함수 객체

_19.5 람다 표현식

_19.6 std::invoke( )

_19.7 정리

_19.8 연습 문제

 

CHAPTER 20 표준 라이브러리 알고리즘 완전 정복

_20.1 알고리즘 개요

_20.2 표준 라이브러리 알고리즘 심층 분석

_20.3 정리

_20.4 연습 문제

 

CHAPTER 21 스트링 현지화와 정규 표현식

_21.1 현지화

_21.2 정규 표현식

_21.3 정리

_21.4 연습 문제

 

CHAPTER 22 날짜와 시간 유틸리티

_22.1 컴파일 시간 유리수

_22.2 duration

_22.3 clock

_22.4 time_point

_22.5 날짜

_22.6 타임존

_22.7 정리

_22.8 연습 문제

 

CHAPTER 23 무작위수 기능

_23.1 C 스타일 무작위수 생성

_23.2 무작위수 엔진

_23.3 무작위수 엔진 어댑터

_23.4 기본 제공 엔진과 엔진 어댑터

_23.5 무작위수 생성하기

_23.6 무작위수 분포

_23.7 정리

_23.8 연습 문제

 

CHAPTER 24 기타 라이브러리 유틸리티

_24.1 어휘 타입

_24.2 tuple

_24.3 정리

_24.4 연습 문제

 

[PART IV C++ 고급 기능 마스터하기]

 

CHAPTER 25 표준 라이브러리 커스터마이즈 및 확장 방법

_25.1 할당자

_25.2 표준 라이브러리 확장하기

_25.3 정리

_25.4 연습 문제

 

CHAPTER 26 고급 템플릿

_26.1 템플릿 매개변수에 대한 심화 학습

_26.2 클래스 템플릿 부분 특수화

_26.3 오버로딩으로 함수 템플릿 부분 특수화 흉내내기

_26.4 템플릿 재귀

_26.5 가변 인수 템플릿

_26.6 메타프로그래밍

_26.7 정리

_26.8 연습 문제

 

CHAPTER 27 C++ 멀티스레드 프로그래밍

_27.1 들어가며

_27.2 스레드

_27.3 아토믹 연산 라이브러리

_27.4 뮤텍스

_27.5 상태 변수

_27.6 래치

_27.7 배리어

_27.8 세마포어

_27.9 퓨처

_27.10 멀티스레드 Logger 클래스 예제

_27.11 스레드 풀

_27.12 코루틴

_27.13 바람직한 스레드 디자인과 구현을 위한 가이드라인

_27.14 정리

_27.15 연습 문제

 

[PART V C++ 소프트웨어 공학]

 

CHAPTER 28 소프트웨어 공학 기법

_28.1 프로세스의 필요성

_28.2 소프트웨어 라이프 사이클 모델

_28.3 소프트웨어 공학 방법론

_28.4 나만의 프로세스와 방법론 만들기

_28.5 소스 코드 관리

_28.6 정리

_28.7 연습 문제

 

CHAPTER 29 효율적인 C++ 코드 작성법

_29.1 성능과 효율에 대하여

_29.2 언어 수준의 효율

_29.3 설계 수준 효율

_29.4 프로파일링 

_29.5 정리 

_29.6 연습 문제

 

CHAPTER 30 테스트 숙달하기

_30.1 품질 관리

_30.2 단위 테스트

_30.3 퍼징

_30.4 하이레벨 테스트

_30.5 성공적인 테스트를 위한 팁

_30.6 정리

_30.7 연습 문제

 

CHAPTER 31 디버깅 완전 정복

_31.1 디버깅 기본 원칙

_31.2 버그 분류

_31.3 버그 방지

_31.4 버그 대비

_31.5 디버깅 테크닉

_31.6 정리

_31.7 연습 문제

 

CHAPTER 32 설계 기법과 프레임워크

_32.1 흔히 사용하지만 까먹기 쉬운 문법

_32.2 고급 기법

_32.3 객체지향 프레임워크

_32.4 정리

_32.5 연습 문제

 

CHAPTER 33 디자인 패턴

_33.1 의존성 주입

_33.2 추상 팩토리 패턴

_33.3 팩토리 메서드 패턴

_33.4 어댑터 패턴

_33.5 프록시 패턴

_33.6 반복자 패턴

_33.7 옵저버 패턴

_33.8 데코레이터 패턴

_33.9 책임 사슬 패턴

_33.10 싱글턴 패턴

_33.11 정리

_33.12 연습 문제

 

CHAPTER 34 크로스 플랫폼과 크로스 언어 애플리케이션 개발 방법

_34.1 크로스 플랫폼 개발

_34.2 크로스 언어 개발

_34.3 정리

_34.4 연습 문제

 

[PART VI 부록]

 

APPENDIX A C++ 면접 예상 질문

APPENDIX B 참고 문헌

APPENDIX C 표준 라이브러리 헤더 파일

APPENDIX D UML 기초

출처 : 한빛미디어

 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 
728x90
반응형
사업자 정보 표시
올딩 | 서항주 | 경기도 성남시 중원구 성남동 3313번지 B동 101호 | 사업자 등록번호 : 119-18-42648 | TEL : 02-6901-7078 | Mail : jason@allding.co.kr | 통신판매신고번호 : 제2012-경기성남-1364호 | 사이버몰의 이용약관 바로가기

댓글

💲 추천 글