Top

A Tour of C++, Third Edition [C++ 창시자가 전하는 최신 C++ 가이드]

  • 원서명A Tour of C++, 3rd Edition (ISBN 9780136816485)
  • 지은이비야네 스트롭스트룹(Bjarne Stroustrup)
  • 옮긴이심지현
  • ISBN : 9791161758565
  • 33,000원
  • 2024년 06월 28일 펴냄
  • 페이퍼백 | 436쪽 | 188*235mm
  • 시리즈 : 프로그래밍 언어

책 소개

요약

C++의 창시자 비야네 스트롭스트룹이 직접 전하는 최신 C++ 가이드이다. C++의 기본 구성 요소인 타입, 클래스, 연산, 템플릿, 컨테이너, 예외 등을 각 장에서 다루면서 C++20에 새로 추가된 모듈, 콘셉트, 코루틴 등을 제네릭 프로그래밍, 협력적 멀티태스킹 같은 최신 개발 방식과 맞물려 설명한다. 변화하는 C++ 버전 속에서 어떤 점을 꼭 알고 넘어가야 하는지 간결하고 정확하게 짚어준다.

저자/역자 소개

지은이의 말

C++가 완전히 달라졌다. C++98이나 C++11에 비해 아이디어를 더 명쾌하고 간단하게 그리고 직관적으로 구현해낼 수 있게 됐다. 컴파일러도 더 빠르고 더 정확하게 결과 프로그램을 생성해낸다.
이 책은 현재 ISO C++ 표준인 C++20 정의를 기준으로 삼아 C++ 주요 공급자가 구현한 C++를 전반적으로 살펴본다. 또한 C++23까지 표준으로 채택될 예정은 없으나 빈번하게 쓰는 라이브러리 컴포넌트도 소개한다.
다른 최신 언어와 마찬가지로 C++ 역시 규모가 매우 크므로 효과적으로 사용하기 위해서는 아주 다양한 라이브러리가 필요하다. 이 얇은 책은 이미 C++에 익숙한 프로그래머가 모던 C++ 구성 요소를 배우기에 알맞다. 주요 언어 기능을 대부분 소개하며 주요 표준 라이브러리 컴포넌트도 다룬다. 하루 이틀이면 읽겠으나 훌륭한 C++ 코드를 작성하기에는 턱없이 부족하다. 완벽하게 설명하기보다는 개략적인 내용과 꼭 필요한 예제만을 제공해 프로그래머에게 시작점을 제공하고자 한다.
이 책은 프로그래밍 경험이 충분하다고 가정한다. 아니라면 『Programming: Principles and Practice Using C++, Second edition 한국어판』(에이콘, 2015) 같은 책부터 읽어보기 바란다. 프로그래밍 경험이 있더라도 사용했던 언어나 개발했던 애플리케이션이 이 책에서 소개할 C++ 방식과 상당히 다를 수 있다.
코펜하겐이나 뉴욕 같은 도시를 관광한다고 해보자. 단체 여행이라면 단 몇 시간 만에 도시의 주요 관광지를 돌아다니며 뒷이야기를 들은 후 다음 장소까지 추천받는다. 이렇게 돌아다녀서는 그 도시에 대해 전혀 알 수 없다. 보고 들은 것이 오롯이 내 것이 되지 않는다.
어떤 이야기는 너무 기이해서 아예 믿어지지도 않는다. 그 도시의 삶을 지배하는 형식적 규칙과 비형식적 규칙을 도무지 알 도리가 없다. 제대로 알려면 몇 년은 살아야 한다. 하지만 약간의 운이 따라 준다면 전체적인 설명을 간략하게 듣게 될지도 모른다. 그럼 그 도시의 무엇이 특별한지, 어떤 부분이 흥미로운지 알게 된다. 이렇게 투어를 마치면 그제서야 진정한 탐험이 시작된다.
이 책에서 제공할 투어는 객체지향과 제네릭 프로그래밍 같은 프로그래밍 스타일을 지원하는 C++ 언어 기능을 소개한다. 언어 기능마다 매번 자세한 참조 매뉴얼을 제공하진 않는다. 훌륭한 교재가 늘 그러하듯이 되도록이면 기능을 사용하기 전에 설명부터 하겠지만 간혹 불가능할 수 있고 모든 독자가 책을 순차적으로 읽지도 않는다. 독자가 어느 정도 기술적 숙련도를 갖췄다고 가정하겠다. 그러니 필요할 때마다 교차 참조나 색인을 활용하기 바란다.
같은 맥락에서 이 투어는 철저한 설명 대신 예제 관점에서 표준 라이브러리를 설명한다. 필요하다면 자료를 추가로 찾아보자. ISO 표준에서 제공하는 기능은 C++ 에코시스템의 극히 일부다(예를 들어 라이브러리, 빌드 시스템, 분석 도구, 개발 환경 등). (품질은 제각각이지만) 온라인상에는 수많은 자료가 존재한다. CppCon이나 Meeting C++ 같은 콘퍼런스에서 어렵지 않게 유용한 튜토리얼과 소개 동영상을 찾을 수 있다. ISO C++ 표준에서 제공하는 언어와 라이브러리를 기술적으로 자세히 살피려면 Cppreference를 읽어보자. 표준 라이브러리 함수나 클래스가 나올 때 정의를 찾아보기 쉽고, 설명서를 읽다 보면 관련 기능이 많이 나온다.
이 투어는 C++를 층층이 쌓인 케이크 대신 통합된 전체로 바라본다. 그래서 C나 C++98, 혹은 그 이후의 ISO 표준에 소개된 언어 기능은 거의 다루지 않는다. 이러한 정보는 19장에 나온다(역사적 배경과 호환성). 목표는 최대한 기초에 집중하면서 간략하게 설명하는 것이지만 모듈(3.2.2절), 콘셉트(8.2절), 코루틴(18.6절) 같은 새로운 기능을 신나게 소개하고 싶은 유혹을 완전히 떨치지는 못했다. 최신 개발 방식을 따르려는 시도 역시 과거의 C++ 버전에 익숙한 많은 독자의 호기심을 충족시킬 것이다.

지은이 소개

비야네 스트롭스트룹(Bjarne Stroustrup)

C++의 설계자이자 최초 구현자이며 『Programming: Principles and Practice Using C++ (Second Edition) 한국어판』(에이콘, 2015)과 『The C++ Programming Language (Fourth Edition) 한국어판』(에이콘, 2015)의 저자이다. 현재 컬럼비아대학교 교수로 재직 중이며 AT&T 벨 연구소, 텍사스 A&M대학교, 모건 스탠리를 거쳤다. C++ 프로그래밍 언어를 개념화하고 개발한 공로를 인정받아 미국공학한림원의 찰스 스타크 드레이퍼 상(Charles Stark Draper Prize)을 받는 등 수많은 영예를 안은 수상자이다. 미국공학한림원 회원이자 IEEE, ACM, CHM, 캠브리지대학교 처칠 칼리지의 석학회원이다.

옮긴이의 말

프로그래밍 언어는 끝을 모르고 진화한다. 특히 C++처럼 거대한 언어는 그 속도와 규모를 따라잡기가 결코 쉽지 않다. 바쁜 일상 속에서 프로그래머는 새로 나온 버전과 기능을 익히느라 늘 고달프다. 이러한 고민을 들어주기라도 하듯이 C++의 창시자 비야네 스트롭스트룹은 이 책을 통해 변화하는 C++ 버전 속에서 어떤 점을 꼭 알고 넘어가야 하는지 간결하고 정확하게 짚어준다. 이 책 한 권으로 C++을 완벽히 숙달할 순 없어도 최소한 어디서부터 시작해야 하는지 알 수 있다. 위에 인용한 비야네 스트롭스트룹의 말처럼 간단하게 끝낼 일을 굳이 어렵게 돌아갈 필요는 없다.
저자는 단순히 기능을 나열하는 데서 멈추지 않는다. 여러 가지 개념을 연계하고, 어떤 상황에서 어떤 요소가 어떻게 쓰이는지 이해하기 쉬운 예제를 들어 설명한다. 적재적소에서 알맞은 표준 라이브러리를 소개하고, 참고하면 좋을 내용도 빠뜨리지 않는다. 독자라면 아무리 좋은 기능이라도 어떻게 조합하고 활용하느냐가 프로그램의 품질을 좌우한다는 사실을 익히 알고 있을 것이다. 훌륭한 유스 케이스를 많이 알아둘수록 코드 수준은 높아지기 마련이니 저자가 고심해 만든 예제를 가볍게 지나치지 말자.
C++는 C++20이 등장하며 큰 변화를 맞이했다. 무엇보다 사용자의 의도를 보다 직관적으로 반영할 수 있는 여러 요소가 대거 추가됐다. 모듈, 콘셉트, 코루틴이 대표적이다. 저자는 C++를 구성하는 기본 요소인 타입, 클래스, 연산, 템플릿, 컨테이너, 예외, 입출력 등을 각 장의 주제로 삼아 기초를 탄탄히 세움과 동시에 C++에 새로 추가된 요소들을 제네릭 프로그래밍과 협력적 멀티태스킹 같은 최신 개발 방식과 맞물려 설명한다. C++20을 기준으로 삼았으나 C++23에 담길 내용도 넌지시 내비친다. C++ 위원회에서 활동했던 경험을 바탕으로 현재 진행 중인 프로젝트를 간간이 언급하며 앞으로를 대비할 수 있게 돕는다.
시간이 촉박하다면 일단 차례부터 읽어보자. 한눈에 쉽게 들어오도록 구성된 차례가 원하는 방향과 목적지로 안내할 것이다. 저자가 아무 까닭 없이 제목을 『Tour of C++』로 지었을 리 없다. C++라는 세계를 즐겁게 여행하며 좀 더 쉽게 C++를 익히는 계기가 되기를 바란다.

옮긴이 소개

심지현

이화여대 컴퓨터공학과를 졸업하고 KAIST 대학원 전산과에서 데이터베이스 전공으로 석사 학위를 취득했다. 주요 연구 분야는 시맨틱 검색과 개인화였으며 졸업 후 네이버에서 검색 서버 설계 및 개발, 검색 모델링과 추천 알고리듬 연구, 빅데이터 분석 등을 담당했다.

목차

목차
  • 1장. 기초 쌓기
  • 1.1 소개
  • 1.2 프로그램
  • 1.3 함수
  • 1.4 타입과 변수, 산술 연산
  • 1.5 범위와 수명
  • 1.6 상수
  • 1.7 포인터, 배열, 참조
  • 1.8 테스트
  • 1.9 하드웨어와의 매핑
  • 1.10 조언

  • 2장. 사용자 정의 타입
  • 2.1 소개
  • 2.2 구조체
  • 2.3 클래스
  • 2.4 열거
  • 2.5 공용체
  • 2.6 조언

  • 3장 모듈성
  • 3.1 소개
  • 3.2 분리 컴파일
  • 3.3 네임스페이스
  • 3.4 함수 인수와 반환값
  • 3.5 조언

  • 4장. 오류 처리
  • 4.1 소개
  • 4.2 예외
  • 4.3 불변
  • 4.4 오류 처리 대안
  • 4.5 어설션
  • 4.6 조언

  • 5장. 클래스
  • 5.1 소개
  • 5.2 구체 타입
  • 5.3 추상 타입
  • 5.4 가상 함수
  • 5.5 클래스 계층 구조
  • 5.6 조언

  • 6장. 필수 연산
  • 6.1 소개
  • 6.2 복사와 이동
  • 6.3 자원 관리
  • 6.4 연산자 오버로딩
  • 6.5 전통적 연산
  • 6.6 사용자 정의 리터럴
  • 6.7 조언

  • 7장. 템플릿
  • 7.1 소개
  • 7.2 매개변수화 타입
  • 7.3 매개변수화 연산
  • 7.4 템플릿 메커니즘
  • 7.5 조언

  • 8장. 콘셉트와 제네릭 프로그래밍
  • 8.1 소개
  • 8.2 콘셉트
  • 8.3 제네릭 프로그래밍
  • 8.4 가변 인자 템플릿
  • 8.5 템플릿 컴파일 모델
  • 8.6 조언

  • 9장. 라이브러리 훑어보기
  • 9.1 소개
  • 9.2 표준 라이브러리 컴포넌트
  • 9.3 표준 라이브러리 구성
  • 9.4 조언

  • 10장. 문자열과 정규식
  • 10.1 소개
  • 10.2 문자열
  • 10.3 문자열 뷰
  • 10.4 정규식
  • 10.5 조언

  • 11장. 입력과 출력
  • 11.1 소개
  • 11.2 출력
  • 11.3 입력
  • 11.4 I/O 상태
  • 11.5 사용자 정의 타입의 I/O
  • 11.6 출력 포맷팅
  • 11.7 스트림
  • 11.8 C 스타일 I/O
  • 11.9 파일 시스템
  • 11.10 조언

  • 12장. 컨테이너
  • 12.1 소개
  • 12.2 vector
  • 12.3 list
  • 12.4 forward_list
  • 12.5 map
  • 12.6 unordered_map
  • 12.7 할당자
  • 12.8 컨테이너 훑어보기
  • 12.9 조언

  • 13장. 알고리듬
  • 13.1 소개
  • 13.2 반복자 사용
  • 13.3 반복자 타입
  • 13.4 프레디킷 사용
  • 13.5 알고리듬 개요
  • 13.6 병렬 알고리듬
  • 13.7 조언

  • 14장. 범위
  • 14.1 소개
  • 14.2 뷰
  • 14.3 생성자
  • 14.4 파이프라인
  • 14.5 콘셉트 개요
  • 14.6 조언

  • 15장. 포인터와 컨테이너
  • 15.1 소개
  • 15.2 포인터
  • 15.3 컨테이너
  • 15.4 대안
  • 15.5 조언

  • 16장. 유틸리티
  • 16.1 소개
  • 16.2 시간
  • 16.3 함수 조정
  • 16.4 타입 함수
  • 16.5 source_location
  • 16.6 move()와 forward()
  • 16.7 비트 조작
  • 16.8 프로그램 종료
  • 16.9 조언

  • 17장. 수
  • 17.1 소개
  • 17.2 수학 함수
  • 17.3 수 알고리듬
  • 17.4 복소수
  • 17.5 난수
  • 17.6 벡터 산술
  • 17.7 수 제약
  • 17.8 타입 에일리어스
  • 17.9 수학 상수
  • 17.10 조언

  • 18장. 동시 실행
  • 18.1 소개
  • 18.2 태스크와 스레드
  • 18.3 데이터 공유
  • 18.4 이벤트 대기
  • 18.5 태스크 커뮤니케이션
  • 18.6 코루틴
  • 18.7 조언

  • 19장. 역사적 배경과 호환성
  • 19.1 역사
  • 19.2 C++ 기능 진화
  • 19.3 C/C++ 호환성
  • 19.4 참고문헌
  • 19.5 조언

  • 부록. std 모듈

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[ p.23: 2행 ]
C++는 동적 타입(statically typed) 언어다.
->
C++는 정적 타입(statically typed) 언어다.