Top

A Tour of C++, 2nd Edition

  • 원서명A Tour of C++, 2nd Edition (ISBN 9780134997834)
  • 지은이비야네 스트롭스트룹(Bjarne Stroustrup)
  • 옮긴이최광민
  • ISBN : 9791161752679
  • 30,000원
  • 2019년 01월 28일 펴냄
  • 페이퍼백 | 388쪽 | 188*235mm
  • 시리즈 : 프로그래밍 언어

책 소개

요약

C++의 장점을 빠르게 훑어보고 싶은 독자에게 유용하다. C++98의 기본적인 내용은 물론이고 C++11부터 현재 한창 개발 중인 C++20에 이르기까지 현대적인 C++을 이루는 핵심 요소를 설명하고, 간단한 예제로 그 활용법을 익힐 수 있다. C++를 처음 시작하는 독자에게는 중요한 개념을 빠르게 훑어볼 기회를, 이미 C++에 익숙한 독자에게는 C++의 최신 기능을 익힐 수 있는 기회를 제공한다.

이 책의 대상 독자

C++를 처음 시작하는 독자보다는 어느 정도 C++에 익숙해진 독자나, 다른 언어에 통달한 개발자로서 C++의 장점을 빠르게 훑어보고 싶은 독자에게 유용하다.

상세 이미지

저자/역자 소개

지은이의 말

C++가 새로운 언어로 느껴지곤 한다. 오늘날의 C++를 이용하면 C++98을 사용하던 때보다 아이디어를 더 명확하고 단순하며 직접적으로 표현할 수 있다. 그리고 이렇게 만들어진 프로그램은 컴파일러가 더 엄격하게 검사하며, 더 빠르게 실행된다. 이 책에서는 C++17에서 정의하는 C++의 개요를 다룬다. C++17은 현재 ISO C++표준으로서 주요 C++ 제공 기업들이 이를 구현하고 있다. 더 나아가 이 책은 콘셉트(concept)와 모듈(module)에 대한 내용을 포함한다. 이에 대한 기법은 ISO 기술 명세에서 다루고 있으며 요즘도 사용되고 있지만, C++20이 릴리스될 때까지 표준에는 포함되지 않을 계획이다.
다른 현대적인 언어와 마찬가지로 C++는 방대한 언어이고, 효과적으로 사용하려면 많은 라이브러리가 필요하다. 따라서 이 책에서는 경험 있는 프로그래머에게 현대적인 C++가 무엇으로 이뤄지는지에 대한 아이디어를 제공하고자 한다. 언어의 중요 기능과 표준 라이브러리의 주요 구성 요소를 설명한다. 몇 시간 안에 이 책을 읽을 수는 있지만, 좋은 C++ 프로그램을 작성하는 요령은 하루아침에 배울 수 없다. 다시 말해, 이 책의 목표는 C++를 마스터하는 것이 아니라, 전체적인 개요와 핵심 예제를 제공함으로써 프로그래머의 시작을 돕는 것이다.
여기서는 독자가 예전에 프로그래밍을 해봤다고 가정하고 진행한다. 그렇지 않다면 먼저『Programming: Principles and Practice Using C++ (Second Edition) 한국어판』(에이콘, 2015)을 비롯한 교과서를 읽기를 권한다. 여러분이 프로그래밍을 해봤다고 하더라도 여기서 다룰 C++의 스타일이 예전에 사용했던 언어와는 매우 다를 수 있다.
코펜하겐이나 뉴욕 같은 도시를 여행한다고 하자. 몇 시간의 관광으로 할 수 있는 일은 주요 관광지 몇 곳에 들러 그 배경에 대한 짧은 이야기를 듣고, 다음에 뭘 해야 할지에 대한 제안을 받는 정도다. 그런 관광 한 번으로는 도시를 제대로 알 수는 없다. 보고 들은 모든 것을 이해할 수도 없고, 도시의 일상을 지배하는 공식적으로나 비공식적인 규칙을 어떻게 알아가야 하는지에 대한 감을 잡을 수도 없다. 한 도시를 알려면 보통 몇 년은 살아야 한다. 그러나 약간의 행운이 따른다면 관광을 하면서 전체적인 개요를 얻고, 그 도시의 무엇이 특별한지, 여러분의 흥미를 끌 만한 것이 무엇인지를 알 수는 있다. 이 짧은 여행의 끝이 진짜 탐험의 시작이 될 수 있다.
이번 여행에서는 객체지향이나 제네릭 프로그래밍 같은 프로그래밍 스타일을 뒷받침하는 C++ 언어의 주요 기능을 살펴본다. 자세한 내용이나 참고용 매뉴얼, 언어의 모든 기능마다 설명을 제공하지는 않는다. 교과서의 관례를 따르자면 어떤 기능을 사용하기 전에 그에 대한 설명을 하겠지만, 그런 일이 항상 가능하지는 않고 모든 사람이 책을 순서대로 읽지도 않는다. 따라서 독자는 목차의 참조를 활용하기 바란다.
마찬가지로 표준 라이브러리를 완벽하게 설명하기보다는 주로 예제를 살펴본다. ISO 표준을 벗어나는 라이브러리는 설명하지 않으니 필요한 보충 자료는 직접 찾아보기 바란다. 『The C++ Programming Language (Fourth Edition) 한국어판』(에이콘, 2015)과 (www.stroustrup.com/applications.html)는 물론이고 웹에서 많은 자료를 얻을 수 있다. 예를 들어 이 책에서 설명하는 표준 라이브러리 함수나 클래스의 정의는 쉽게 찾아볼 수 있고, 문서를 읽어보면 관련된 많은 기능을 찾아볼 수 있다.
이번 여행에서는 층층이 나눠진 케이크가 아니라, 통합된 전체로서의 C++를 다룬다. 따라서 언어의 어떤 기능이 C나 C++98에서 유래됐는지, 혹은 C++11이나 C++14, C++17에서 새로 도입됐는지를 밝히지는 않는다. 이에 대한 내용은 16장에서 간략히 볼 수 있다.
여기서는 기본에 집중하고 명료함을 유지하고자 한다. 그러나 새로운 기능을 자랑하고 싶은 충동을 완전히 억제할 수는 없었다. 이 또한 예전 버전의 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++를 구상하고 개발한 공로를 인정받아 미국 국립 공학회에서 수여하는 2018 찰스 스타크 드레이퍼 공학상을 받았고, 그 외에 많은 영예를 누렸다. 미국 국립 공학회의 일원이자 IEEE와 ACM 펠로우다.

옮긴이의 말

인간이 사용하는 언어의 흥망성쇠는 인간의 역사와 그 궤를 같이합니다. 로마 시대에는 라틴어가 국제 공용어로 사용됐고, 영국이 산업 혁명 시대의 주도권을 잡은 이후에는 영어가 전 세계에 널리 쓰이고 있습니다.
마찬가지로 프로그래밍 언어의 변화를 살펴보면 IT 기술이 어떻게 발전했는지 맥을 짚을 수 있습니다. 지금 우리가 쓰고 있는 컴퓨터/네트워크 인프라가 한창 개발되던 시절에는 최초의 고급 언어이면서 하드웨어 친화적인 C 언어가 등장해 널리 사용됐습니다. 그리고 애플리케이션의 규모와 복잡성이 날로 증가하면서 객체지향 프로그래밍 패러다임을 채택한 C++와 자바가 각광 받았습니다.
근래 들어 컴퓨팅 성능이 급격히 성장하고, 전 세계를 연결하는 통로로 웹이 주목받으면서 자바스크립트가 웹의 프론트엔드는 물론, 백엔드에서도 널리 사랑받고 있습니다. 빅데이터와 인공지능 열풍에 힘입어 크게 성장한 파이썬도 빼놓을 수 없습니다.
이렇게 하루가 다르게 기술이 발전하고 프로그래밍 언어도 계속 변화해 가는데, 우리는 왜 굳이 (근래의 스크립트언어에 비해서 상대적으로) 어려운 C++를 배워야 할까요? 첫 번째 이유는 만병통치약은 없고, 모든 기술이 그러하듯 프로그래밍 언어마다 장단점이 있기 마련입니다. 스크립트 언어의 느슨한 타입 시스템은 쉽고 빠른 개발이 가능하지만, 수십 명이 함께 참여하는 대규모 프로젝트에서는 관리하기 쉽지 않습니다. 응용 분야에 따라서는 하드웨어에 대한 접근성과 성능이 큰 이슈가 되기도 합니다.
두 번째 이유는 언어마다 추구하는 패러다임과 철학이 다르기 때문입니다. 인간의 언어가 문화와 국민성을 반영한다는 말이 있듯이, 프로그래밍 언어도 그것이 만들어진 기술적 환경과 목적에 따라 그 특성을 달리합니다. 따라서 여러 가지 프로그래밍 언어를 공부한다는 것은 우리의 아이디어를 표현하는 방식은 물론, 사고를 전개해 나가는 새로운 패러다임을 배우는 것입니다. 이렇게 새로운 언어를 익히면 프로그래머로서 사고의 지평을 넓히는 데 조금이라도 도움이 될 것입니다.
구구절절 이유를 설명하지 않아도, C++는 여전히 우리의 컴퓨팅 기반 구조를 이루는 중요한 언어입니다. 그 사실만으로도 C++를 배워볼 이유는 충분합니다. 문제는 C++를 제대로 배우기가 쉽지 않다는 것입니다. C++는 방대한 기능을 갖춘 언어며, 계속 발전하는 언어이기 때문입니다.
이 책은 C++를 처음 시작하는 독자보다는 어느 정도 C++에 익숙해진 독자나, 다른 언어에 통달한 개발자로서 C++의 장점을 빠르게 훑어보고 싶은 독자에게 유용합니다. C++98의 기본적인 내용은 물론이고 C++11부터 현재 한창 개발 중인 C++20에 이르기까지 현대적인 C++를 이루는 핵심 요소를 설명하고, 간단한 예제로 그 활용법을 익힐 수 있습니다. 부디 이 책이 C++에 대해 더 깊이 알고 싶어 하는 프로그래머에게 도움이 되길 바랍니다.

옮긴이 소개

최광민

한양대학교 컴퓨터 전공을 마치고 삼성 SDS 책임 연구원을 거쳐, 현재 인공지능 스타트업 알레시오에서 CTO로 재직 중이다. 회사에서든 일상에서든 새롭고 흥미로운 기술이라면 무엇이든 배우고 즐길 준비가 돼 있으며, 백발노인이 돼서도 끝없이 탐구하고 창조하는 사람이 되는 것을 인생의 목표로 삼고 있다.

목차

목차
  • 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.1 구조체
    • 2.3 클래스
    • 2.4 공용체
    • 2.5 열거형
    • 2.6 조언

  • 3장. 모듈화
    • 3.1 소개
    • 3.2 분할 컴파일
    • 3.3 모듈(C++20)
    • 3.4 네임스페이스
    • 3.5 에러 처리
    • 3.6 함수 인자와 반환 값
    • 3.7 조언

  • 4장. 클래스
    • 4.1 소개
    • 4.2 구체 타입
    • 4.3 추상 타입
    • 4.4 가상 함수
    • 4.5 클래스 계층 구조
    • 4.6 조언

  • 5장. 필수적인 연산
    • 5.1 소개
    • 5.2 복사와 이동
    • 5.3 자원 관리
    • 5.4 관례적인 연산
    • 5.5 조언

  • 6장. 템플릿
    • 6.1 소개
    • 6.2 파라미터화된 타입
    • 6.3 파라미터화된 연산
    • 6.4 템플릿 메커니즘
    • 6.5 조언

  • 7장. 컨셉과 제네릭 프로그래밍
    • 7.1 소개
    • 7.2 컨셉(C++20)
    • 7.3 제네릭 프로그래밍
    • 7.4 가변 템플릿
    • 7.5 템플릿 컴파일 모델
    • 7.6 조언

  • 8장. 라이브러리의 개요
    • 8.1 소개
    • 8.2 표준 라이브러리 구성 요소
    • 8.3 표준 라이브러리 헤더와 네임스페이스
    • 8.4 조언

  • 9장. 문자열과 정규 표현식
    • 9.1 소개
    • 9.2 문자열
    • 9.3 문자열 뷰
    • 9.4 정규 표현식
    • 9.5 조언

  • 10장. 입력과 출력
    • 10.1 소개
    • 10.2 출력
    • 10.3 입력
    • 10.4 입출력 상태
    • 10.5 사용자 정의 타입의 입출력
    • 10.6 형식화
    • 10.7 파일 스트림
    • 10.8 문자열 스트림
    • 10.9 C 스타일 입출력
    • 10.10 파일 시스템
    • 10.11 조언

  • 11장. 컨테이너
    • 11.1 소개
    • 11.2 vector
    • 11.3 list
    • 11.4 map
    • 11.5 unordered_map
    • 11.6 컨테이너 개요
    • 11.7 조언

  • 12장. 알고리즘
    • 12.1 소개
    • 12.2 반복자의 사용
    • 12.3 반복자 타입
    • 12.4 스트림 반복자
    • 12.5 술어
    • 12.6 알고리즘 요약
    • 12.7 컨셉(C++20)
    • 12.8 컨테이너 알고리즘
    • 12.9 병렬 알고리즘
    • 12.10 조언

  • 13장. 유틸리티
    • 13.1 소개
    • 13.2 자원 관리
    • 13.3 구간 검사: gsl::span
    • 13.4 특수한 컨테이너
    • 13.5 선택지
    • 13.6 할당자
    • 13.7 시간
    • 13.8 함수 어댑션
    • 13.9 타입 함수
    • 13.10 조언

  • 14장. 수치
    • 14.1 소개
    • 14.2 수학 함수
    • 14.3 수치 알고리즘
    • 14.4 복소수
    • 14.5 난수
    • 14.6 벡터 산술
    • 14.7 수치 한계
    • 14.8 조언

  • 15장. 동시성
    • 15.1 소개
    • 15.2 태스크와 thread
    • 15.3 인자 전달
    • 15.4 결과 반환
    • 15.5 데이터 공유
    • 15.6 이벤트 대기
    • 15.7 태스크 간 통신
    • 15.8 조언

  • 16장. 역사와 호환성
    • 16.1 역사
    • 16.2 C++ 기능의 진화
    • 16.3 C/C++ 호환성
    • 16.4 참고 자료
    • 16.5 조언

도서 오류 신고

도서 오류 신고

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

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

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

정오표

정오표

수정 사항은 여기에서 내려받으세요.

2021.07.16 이후 추가 사항

[p.130 코드 4행]
Vectory(2000);
->
Vector y(2000);

[p.226 : 두 번째 코드 2행]
tr y
->
try

[p.235 : 첫 번째 코드 1행]
vector
->
vector

[p.243 : 두 번째 코드 1행]
void f(const Entry& ee, list::iterator p, list::iterator q)
->
void f(const Entry& ee, list::iterator p, list::iterator q)

[p.264 : 아래에서]
는 규칙의 유한한 집한으로
->
는 규칙의 유한한 집합으로