Steady Seller

The C++ Programming Language (Fourth Edition) 한국어판

  • 원서명The C++ Programming Language, 4th Edition (ISBN 9780321563842)
  • 지은이비야네 스트롭스트룹(Bjarne Stroustrup)
  • 옮긴이박지유
  • ISBN : 9788960778092
  • 65,000원
  • 2015년 12월 30일 펴냄
  • 페이퍼백 | 1,388쪽 | 188*255mm
  • 시리즈 : 프로그래밍 언어

책 소개

요약

이 책은 C++의 창시자인 비야네 스트롭스트룹이 직접 쓴 C++ 참고도서의 결정판으로서, 2011년 발표된 ISO C++11 표준을 반영한 최신판이다. C++11에 와서 C++는 큰 변화를 겪었으며, 그 결과 더 나아진 프로그래밍 언어가 됐다. 이런 특성을 효과적으로 활용하기 위해서는 기존과 다른 C++ 프로그래밍 접근법이 필요하다. 저자는 C++의 새로운 기능들을 단순 나열식으로 설명하지 않고, C++11의 배경이 되는 설계 철학을 바탕으로 새로운 개념과 기법들을 통합적 관점으로 설명한다. C++11 표준화 작업에 주도적으로 참여한 저자로서 다른 책에서 찾아볼 수 없는 C++11의 미묘한 특징들을 효과적으로 드러내주는 예제와 설명을 독자들에게 전해 줄 것이다.

이 책에서 다루는 내용

새로운 C++11에서 다루는 내용
■ 병행성 지원
■ 정규 표현식, 자원 관리 포인터, 난수, 개선된 컨테이너
■ 범용의 통일화된 초기화, 단순화된 for 문, 이동 의미 구조, 유니코드 지원
■ 람다, 범용 상수 표현식, 클래스 기본 설정에 대한 제어, 가변인자 템플릿, 템플릿 별칭, 사용자 정의 리터럴
■ 호환성 이슈

이 책에서 다루는 종합적인 내용
■ 기본 기능: 타입, 객체, 유효 범위, 저장공간, 계산의 기본 및 기타
■ 네임스페이스, 소스 파일, 예외 처리에 의해 지원되는 모듈성
■ 전통적인 프로그래밍, 객체 지향 프로그래밍, 일반화 프로그래밍의 통합을 지원하는 형태로서 클래스, 클래스 계층 구조, 템플릿을 포함하는 C++ 추상화
■ 표준 라이브러리: 컨테이너, 알고리즘, 반복자, 문자열, 스트림 입출력, 로케일, 수치 및 기타
■ C++ 기본 메모리 모델에 대한 심층적인 탐구

이 책의 대상 독자

이 책은 다음과 같은 세 가지 독자층을 염두에 뒀다.

■ 최신 ISO C++ 표준이 제공할 수 있는 가능성이 무엇인지 알고 싶은 C++ 프로그래머
■ C++이 C보다 더 나은 뭔가를 제공할 수 있는지 궁금한 C 프로그래머
■ 자바, C+, 파이썬, 루비 같은 애플리케이션 언어를 다뤄본 사람들 중에 컴퓨터와 좀 더 가까운, 즉 좀 더 융통성 있고 좀 더 나은 컴파일 타임 체크를 제공하며, 좀 더 나은 성능을 제공하는 뭔가를 찾는 이들

당연히 이 세 그룹이 동떨어진 건 아니다. 전문 소프트웨어 개발자들은 한 가지 이상의 프로그래밍 언어에 숙달해 있다.
이 책은 독자들이 프로그래머라고 가정한다. for 루프나 컴파일러가 뭔지 모른다면 이 책은 (아직) 여러분에게 적합한 책이 아니다. 프로그래밍과 C++를 시작한다면 내가 쓴 『Programming: Principles and Practice Using C++ (Second Edition) 한국어판』(에이콘, 2015)을 대신 추천한다. 게다가 나는 독자들이 소프트웨어 개발자로서 어느 정도 숙련돼 있다고 가정한다. “뭐하러 테스트를 하지?”라고 묻던가, “모든 언어는 기본적으로 다 똑같아. 문법만 알려달란 말이야.”라고 말하든가, 모든 작업에 두루 적합한 단 한 가지 언어가 있다고 확신한다면 이 책은 여러분에게 적합한 책이 아니다.

이 책의 구성

순수 학습서는 어떤 원리든지 설명한 후에 활용되게 하기 위해 순서대로 주제를 나열하므로,첫 페이지부터 순서대로 읽어야 한다. 반대로 순수 참고 매뉴얼은 어디서부터 읽어도 좋다. 참고 매뉴얼은 관련된 주제에 대한 전후의 참조 사항을 곁들여 각 주제를 간결하게 설명한다. 순수 학습서는 원칙적으로 선행 학습 없이는 읽을 수 없으며, 모든 사항을 상세하게 설명한다. 순수 참고서는 기본적인 모든 개념과 기법에 익숙한 독자를 대상으로 한 것이다. 대부분의 개념과 기법을 알고 있는 독자라면 장 단위나 절 단위로 참고서를 이용할 수 있다. 그렇지 않은 독자라면 처음부터 시작하되 세부 사항에 지나치게 매달리려고 하지 말아야 한다. 색인과 상호 참조를 활용하자.
책의 각 부분이 상대적으로 자기 완결적이다 보니 중복을 피할 수 없지만, 중복은 순서대로 책을 읽는 독자들에게는 복습의 의미도 있다. 이 책은 자체적인 내용과 ISO C++ 표준 양쪽을 상당한 비중으로 참조한다. 숙련된 프로그래머들은 C++ ‘둘러보기’를 비교적 재빨리 훑어보면 이 책을 참고서로 활용하는 데 필요한 개요를 파악할 수 있다. 이 책은 다음과 같은 4개의 부분으로 구성돼 있다.

1부, 도입부: 1장은 이 책에 대한 안내이며, C++의 배경 지식을 설명한다. 2장~5장은 C++ 언어와 C++ 표준 라이브러리에 대한 간단한 안내를 제공한다.
2부, 기본 기능: 6장~15장은 C++의 기본 제공 타입과 기본 기능을 이용해서 프로그램을 구성하는 방법을 설명한다.
3부, 추상화 메커니즘: 16장~29장은 C++의 추상화 메커니즘과 객체지향 및 일반화 프로그래밍에 그것들을 활용하는 방법을 설명한다.
4부, 표준 라이브러리: 30장~44장은 표준 라이브러리에 대한 개요와 호환성 이슈에 대해 논의한다.

저자/역자 소개

지은이의 말

C++는 새로운 언어처럼 느껴진다. 즉, C++11에서는 C++98에서보다 자신의 생각을 좀 더 명료하고, 좀 더 간단하며, 좀 더 직접적으로 표현할 수 있다. 게다가 결과로 만들어지는 프로그램은 컴파일러에서 더 잘 체크되며 더 빠르게 실행된다. 이 책은 완결성에 목적을 둔다. 이 책은 현업 프로그래머에게 필요한 모든 언어 기능과 표준 라이브러리 구성 요소를 설명한다. 각각에 대해 다음과 같은 내용이 제공된다.

■ 논리적 근거: 그것은 어떤 종류의 문제를 해결하는 데 도움을 주려고 설계됐는가? 설계의 바탕이 되는 원리는 무엇인가? 근본적인 한계는 무엇인가?
■ 명세: 그것의 정의는 무엇인가? 세부 사항의 수준은 전문 프로그래머를 대상으로 선택됐다. 열렬한 언어 탐구자라면 ISO 표준에 대한 수많은 참고 내용들을 따라갈 수 있다.
■ 예제: 그것은 어떻게 자체적으로 또는 다른 기능들과 조합돼 사용될 수 있는가? 핵심 기법과 표현 방식은 무엇인가? 유지 보수성과 성능에 대해서는 어떤 영향을 미치는가?

C++의 사용은 지난 몇 년간 급격한 변화를 겪었으며, 언어 자체 역시 마찬가지다. 프로그래머의 입장에서 보면 대부분의 변화는 더 나아진 것이었다. 현재의 ISO 표준(ISO/IEC 14882-2011, 보통 C++11이라고 불림)은 양질의 소프트웨어를 작성하는 데 있어 이전 버전에 비해 훨씬 나은 도구다. C++11은 어떻게 더 나은 도구인가? 최신 C++는 어떤 종류의 프로그래밍과 기법을 지원하는가? 깔끔하고, 정확하며, 유지보수에 용이하고, 효율적인 C++ 코드의 기본 구성 요소는 무엇인가? 이런 것들이 이 책에서 해답을 제시하려는 주요한 질문들이다. 많은 해답이 1985년, 1995년, 2005년의 구식 C++에서 찾을 수 있는 답과 달라졌다. 진보가 일어난 것이다.

C++는 풍부한 타입과 가벼운 추상화를 설계하고 활용하는 데 역점을 두는 범용 프로그래밍 언어다. C++는 소프트웨어 하부 구조에서 발견되는 자원적 제약이 있는 애플리케이션에 특히 적합하다. C++는 양질의 코드 작성에 필요한 기법에 숙달되기 위해 시간을 투자하는 프로그래머에게 보답한다. C++는 프로그래밍 작업을 진지하게 고려하는 이들을 위한 언어다. 우리의 문명은 소프트웨어에 절대적으로 의존한다. 그런 소프트웨어는 양질이어야 한다.

배포된 C++ 코드는 수십억 줄에 달한다. 이로 인해 안정성이 특히 중요시돼 1985년과 1995년의 C++ 코드가 아직까지 동작하고, 앞으로 수십 년 동안 계속 동작하게 될 것이다. 하지만 모든 애플리케이션에 대해 최신 C++로 더 나은 결과를 얻을 수 있다. 오래된 스타일을 고수한다면 낮은 품질에 낮은 성능을 보이는 코드를 작성할 수밖에 없다. 안정성에 대한 강조는 오늘 작성한 표준 준수 코드가 지금으로부터 20년 후에도 여전히 동작할 것이라는 뜻이다. 이 책의 모든 코드는 2011 ISO C++ 표준을 준수한다.

C++98에 비해 C++11에서 추가된 기능은 무엇인가? 상당한 병행성을 갖춘 현대적 컴퓨터에 적합한 기계 모델, 시스템 레벨의 병행성 프로그래밍을 수행하기 위한 언어 및 표준 라이브러리 기능(예를 들면 멀티코어를 활용한), 정규 표현식 처리, 자원 관리 포인터, 난수, 개선된 컨테이너(해시 테이블을 비롯한) 등이고, 범용적이고 통일적인 초기화, 더 간단해진 for문, 이동 의미 구조, 기초적인 유니코드 지원, 람다, 일반 상수 표현식, 클래스 기본 값에 대한 제어, 가변 인자 템플릿, 사용자 정의 리터럴 등이다. 이런 라이브러리와 언어 기능은 양질의 소프트웨어 개발에 필요한 프로그래밍 기법을 지원하기 위해 존재한다는 점을 기억하기 바란다. 이런 기능들은 건물의 벽돌처럼 함께 사용되도록 의도된 것이지, 특정 문제를 해결하기 위해 고립돼 개별적으로 사용되도록 의도된 것이 아니다. 컴퓨터는 범용 기기이며, C++는 이러한 능력을 통해 그런 목적을 만족시킨다. 특히 C++의 설계 목표는 설계자들이 생각지도 못한 미래의 문제들에 대응할 수 있게끔 충분히 융통성 있고 범용적이 되는 것이다.

지은이 소개

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

C++의 설계자이자 창시자이며, 『Programming: Principles and Practice Using C++ (Second Edition) 한국어판』(에이콘, 2015)을 비롯한 인기 있는 여러 학습서의 저자다. 텍사스 A&M 대학의 특별 교수며, 컴퓨터 과학과 의학과장이다. 미국 공학 아카데미의 멤버이자 IEEE 펠로우, ACM 펠로우이다. 그는 C++ ISO 표준화에 적극적으로 참여하고 있다.

옮긴이의 말

이 책의 원서인 『The C++ Programming Language』는 C++ 프로그래머들에게는 굳이 설명이 필요하지 않을 정도로 유명한 책이다. 무엇보다 C++ 언어의 창시자인 비야네 스트롭스트룹(Bjarne Stroustrup)이 직접 쓴 책으로서 이전까지 3판이 출시될 정도로 C++ 참고 도서의 결정판으로 자타가 공인하는 시리즈였다.

이 책의 이전 판인 3판의 경우 원서는 1997년에 출간됐고, 국내 번역서는 2005년에 출간됐다. 이 책의 3판은 1998년에 표준안이 발표된 ISO C++ 표준을 기반으로 쓰여졌으나 이후 2011년 ISO C++11 표준안이 공식 발표됐다. C++11 표준을 반영한 원서의 4판이 2013년 출간된 이후로 2014년부터 번역을 시작해서 2015년에 드디어 국내 번역판이 출간된 것이다. 그러니까 원서 기준으로는 16년, 번역서 기준으로는 10년 만에 새 판이 출간된 셈이다. 이 책의 이전 판 번역서는 절판된 지가 꽤 됐지만, 아직까지도 중고로 내놓으면 눈 깜짝할 사이에 판매될 정도로 인기를 누리고 있다.

그러다 보니 숙련된 C++ 프로그래머들 중에서는 개정4판의 번역서를 손꼽아 기다리는 사람도 적지 않을 것이다. 4판은 그런 사람들의 기대를 훨씬 뛰어 넘는 책으로, C++11에서 C++가 큰 진보를 이룬 결과에 맞춰 책도 큰 발전을 이뤘다. C++11에 관한 새로운 내용들이 대폭 추가됐을 뿐 아니라 기존의 내용 역시 거의 대부분 다시 쓰여졌다. 3분의 1 정도를 제외하고는 거의 새로 쓰여졌다고 봐도 무방하다. 또한 대상 독자층에도 약간의 변화가 있었다. 3판까지는 다소 어중간한 독자층을 대상으로 했다면 4판에 와서는 같은 저자가 쓴 C++ 초심자에게 초점이 맞춰진 『Programming: Principles and Practice Using C++ (Second Edition) 한국어판』(에이콘, 2015)가 출간된 관계로, 이 책은 좀 더 숙련된 프로그래머에게 초점이 맞춰졌다. 즉 이 책은 C++나 프로그래밍 언어를 처음 공부하려는 분들에게 적합한 책은 아니며, 어느 정도 숙련된 프로그래머의 손에 쥐어졌을 때 가장 빛을 발할 수 있는 책이다.

C++11 표준이 승인된 것은 2011년이었지만, 2012년에 되어서야 C++11 표준이 반영된 컴파일러가 출시됐으므로, C++ 표준은 세상에 나온 지 얼마 안 되는 셈이다. 특히 국내를 보면 현업 프로그래머들 중 상당수가 아직도 C++98의 예전 표준에 훨씬 더 익숙한 것으로 보인다. 나의 경우에도 주로 C++98 표준 기반으로 C++ 프로그래밍을 접해 온 까닭인지 C++11로 작성된 코드는 C++가 아닌 다른 프로그래밍 언어라는 느낌이 들 정도로 새로웠다.

그 정도로 C++는 C++11에 와서 큰 변화를 겪었다. 다행히 그런 변화는 좀 더 발전적인 방향으로의 변화인 듯싶다. 이 책에서는 C++11에서 새로이 추가된 병행성 지원, 정규 표현식 처리, 자원 관리 포인터, 난수, 개선된 컨테이너(해시 테이블을 비롯한), 범용적이고 통일적인 초기화, 더 간단해진 for 문, 이동 의미 구조, 기초적인 유니코드 지원, 람다, 일반 상수 표현식, 클래스 기본 값에 대한 제어, 가변 인자 템플릿, 사용자 정의 리터럴 등에 대한 개념과 관련된 예제를 상세히 설명한다.

단순히 추가된 기능을 나열식으로 설명하는 것이 아니라 C++11에서 달라진 새로운 C++ 프로그래밍 접근법을 통합적인 관점, 최적의 예제 및 추천 기법 등을 통해 효과적으로 설명한다. 저자의 주장에 의하면 C++11에 와서 C++는 더 나은 프로그래밍 언어가 됐다. 그런 더 나아진 C++의 면면을 가장 속속들이 배우기에 이 책보다 더 나은 책은 있을 수 없다. 저자가 C++의 창시자일 뿐만 아니라 C++11 표준화 작업에 깊숙이 참여했기 때문이다. 실제로 이 책에서는 C++11의 표준화 작업에 깊숙이 참여한 관계자만이 들려줄 수 있는 C++11의 미묘한 측면들을 설명하고 있는데, 독자들이 다른 C++11 도서에서는 찾아보기 어려운 내용들을 많이 접하게 되리라 자신한다. 이 책을 통해 새로운 C++11 표준을 익힘으로써 독자들이 저자가 기대하는 바와 같이 자신의 생각을 좀 더 명확하고, 단순하며, 직접적으로 표현하고, 좀 더 빠르게 동작하고 좀 더 효율적인 코드를 작성할 수 있게 되기를 바란다.

워낙 유명한 시리즈다 보니 이 책의 번역을 맡게 된 것은 옮긴이로서 영광이기도 했지만, 동시에 상당히 부담스러운 일이었다. 특히 C++11에 와서 새로운 개념들이 많이 추가됐는데, C++11의 새로운 개념들이 아직 국내 현업에서 정착화되지 않은 상태이다 보니 용어 번역에 어려움을 겪었다. 번역에 있어 부족한 부분은 독자 여러분들의 피드백에 따라서 개선할 수 있는 기회를 갖게 되기를 바라며, 이전 판처럼 오랜 기간 동안 C++ 프로그래머 여러분들에게 도움이 될 수 있는 책이 되기를 기대한다.

옮긴이 소개

박지유

1990년대부터 IT 업계에 종사해온 개발자로서, IT 산업 전반과 게임 분야에 특히 관심이 많다. 다양한 기사와 도서 등의 번역가로도 활동 중이다. 번역서로는 에이콘출판사에서 출간한 『코코스2d-x 모바일 2D 게임 개발』(2013), 『오픈소스와 소프트웨어 산업, 상생의 경제학』(2013), 『유니티 네트워크 게임 만들기』(2015) 등이 있다.

목차

목차
  • 1부 소개
    • 1장 독자 참고 사항
    • 2장 C++ 둘러보기: 기초
    • 3장 C++ 둘러보기: 추상화 메커니즘
    • 4장 C++ 둘러보기: 컨테이너와 알고리즘
    • 5장 C++ 둘러보기: 병행성과 유틸리티

  • 2부 기본 기능
    • 6장 타입과 선언
    • 7장 포인터, 배열, 참조
    • 8장 구조체, 공용체, 열거형
    • 9장 문장
    • 10장 표현식
    • 11장 선택 연산
    • 12장 함수
    • 13장 예외 처리
    • 14장 네임스페이스
    • 15장 소스 파일과 프로그램

  • 3부 추상화 메커니즘
    • 16장 클래스
    • 17장 생성, 마무리, 복사와 이동
    • 18장 연산자 오버로딩
    • 19장 특수 연산자
    • 20장 파생 클래스
    • 21장 클래스 계층 구조
    • 22장 런타임 타입 정보
    • 23장 템플릿
    • 24장 일반화 프로그래밍
    • 25장 특수화
    • 26장 인스턴스화
    • 27장 템플릿과 계층 구조
    • 28장 메타프로그래밍
    • 29장 행렬 설계

  • 4부 표준 라이브러리
    • 30장 포준 라이브러리 개요
    • 31장 STL 컨테이너
    • 32장 STL 알고리즘
    • 33장 STL 반복자
    • 34장 메모리와 자원
    • 35장 유틸리티
    • 36장 문자열
    • 37장 정규 표현식
    • 38장 입출력 스트림
    • 39장 로케일
    • 40장 수치
    • 41장 병행성
    • 42장 스래드와 태스크
    • 43장 C 표준 라이브러리
    • 44장 호환성

도서 오류 신고

도서 오류 신고

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

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

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

정오표

정오표

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

[p.74: 1행]

[p.238: 아래에서 7행]
프로그래머는 참조자가 유효하다고 가장할 수도 있다.
->
프로그래머는 참조자가 유효하다고 가정할 수도 있다.

[p.1289: 아래에서 7행]
42장과 41잘
->
41장과 42장