이미 소장하고 있다면 판매해 보세요.
|
시작하면서
Chapter 0 시작 전 몸풀기 0.1 주석 0.2 #include 0.3 main 함수 0.4 중괄호 0.5 표준 라이브러리를 사용하여 출력하기 0.6 return 문 0.7 살짝 깊이 들여다 보기 0.8 내용 정리 연습문제 Chapter 1 문자열 처리하기 1.1 입력 1.2 이름에 테두리 만들기 1.3 내용 정리 연습문제 Chapter 2 루프와 카운트 2.1 문제점 2.2 전체 구조 2.3 알 수 없는 개수의 행 출력하기 2.3.1 while 문 2.3.2 while 문 설계 2.4 행 출력하기 2.4.1 경계 문자 출력하기 2.4.2 비경계 문자 출력하기 2.5 완전한 테두리를 갖는 프로그램 2.5.1 std::의 반복적인 사용을 축약 2.5.2 간결함을 위해 for 문 사용하기 2.5.3 테스트 합치기 2.5.4 완전한 테두리 프로그램 2.6 카운팅 2.7 내용 정리 연습문제 Chapter 3 일괄 데이터로 작업하기 3.1 학생 성적 계산하기 3.1.1 입력의 끝 테스트하기 3.1.2 루프 불변식 3.2 평균 대신 중앙 값 사용하기 3.2.1 vector에 일련의 데이터 저장하기 3.2.2 출력하기 3.2.3 몇 가지 추가적으로 살펴볼 점 3.3 내용 정리 연습문제 Chapter 4 프로그램과 데이터의 구조화 4.1 계산 처리 구조화하기 4.1.1 중앙 값 찾기 4.1.2 성적 계산식 다시 구현하기 4.1.3 과제성적 읽기 4.1.4 함수 매개변수 양식 세 가지 4.1.5 함수를 사용해서 성적 계산하기 4.2 데이터 구조화하기 4.2.1 학생의 데이터를 모두 함께 저장하기 4.2.2 학생 레코드 관리하기 4.2.3 보고서 양식 출력하기 4.3 모두 합치기 4.4 성적 산출 프로그램을 쪼개기 4.5 개선된 성적 산출 프로그램 4.6 내용 정리 연습문제 Chapter 5 순차 컨테이너의 사용 및 문자열 분석 5.1 학생들을 카테고리별로 분류하기 5.1.1 원하는 요소 삭제하기 5.1.2 순차 접근과 임의 접근 5.2 반복자(Iterator) 5.2.1 반복자 타입 5.2.2 반복자 연산 5.2.3 간편한 사용법 5.2.4 students.erase(students.begin() + i)의 뜻 5.3 인덱스 대신 반복자 사용하기 5.4 성능 향상을 위해 자료구조를 다시 고민하기 5.5 list 타입 5.5.1 중요한 차이점 5.5.2 도대체 어떤게 좋다는 거죠? 5.6 string 분석하기 5.7 split 함수 테스트하기 5.8 string 합치기 5.8.1 그림의 외곽 그리기 5.8.2 수직 결합 5.8.3 수평 결합 5.9 내용 정리 연습문제 Chapter 6 라이브러리 알고리즘 사용하기 6.1 string 분석하기 6.1.1 split하는 또 다른 방법 6.1.2 회문(Palindromes) 6.1.3 URL 찾기 6.2 성적 계산법의 비교 6.2.1 학생 레코드 다루기 6.2.2 성적 분석하기 6.2.3 평균 과제 성적에 기반한 성적 계산 6.2.4 완료된 과제의 중앙 값 6.3 학생 분류 문제 재시도 6.3.1 2-패스 솔루션 6.3.2 단일-패스 솔루션 6.4 알고리즘, 컨테이너 그리고 반복자 6.5 내용 정리 연습문제 Chapter 7 연관 컨테이너 사용하기 7.1 효과적인 참조 방법을 제공하는 컨테이너 7.2 단어 개수 세기 7.3. 교차-참조 테이블 생성 7.4 문장 생성하기 7.4.1 규칙 표현하기 7.4.2 문법 읽어들이기 7.4.3 문장 생성하기 7.4.4 무작위 요소를 선택하기 7.5 성능에 관하여 7.6 내용 정리 연습문제 Chapter 8 제네릭 함수 작성하기 8.1 제네릭 함수란? 8.1.1 알려지지 않은 타입의 중앙 값 8.1.2 템플릿 인스턴스화 8.1.3 제네릭 함수와 타입 8.2 자료구조 독립성 8.2.1 알고리즘과 반복자 8.2.2 순차적 읽기-전용 접근 8.2.3 순차적 쓰기-전용 접근 8.2.4 순차적 읽기-쓰기 접근 8.2.5 역방향으로 접근 8.2.6 임의 접근 8.2.7 반복자 범위 및 끝 지난 값 8.3 입력 및 출력 반복자 8.4 융통성을 위해 반복자 사용하기 8.5 내용 정리 연습문제 Chapter 9 새로운 타입 정의하기 9.1 Student_info 되짚어 생각하기 9.2 Class 타입 9.2.1 멤버 함수 9.2.2 비멤버 함수들 9.3 보호정책(Protection) 9.3.1 접근 함수(Accessor function) 9.3.2 비어있는지 테스트 9.4 Student_info 클래스 9.5 생성자(Constructor) 9.5.1 기본 생성자 9.5.2 인자를 사용하는 생성자 9.6 Student_info 클래스 사용하기 9.7 내용 정리 연습문제 Chapter 10 메모리 관리 및 저수준 자료구조 10.1 포인터와 배열 10.1.1 포인터 10.1.2 함수에 대한 포인터 10.1.3 배열 10.1.4 포인터 산술 연산 10.1.5 인덱싱(Indexing) 10.1.6 배열 초기화 10.2 문자열 리터럴 다시 살펴보기 10.3 문자 포인터 배열 초기화하기 10.4 main에 대한 인자들 10.5 파일 읽기 및 쓰기 10.5.1 표준 에러 스트림 10.5.2 여러 입력 파일과 출력 파일 다루기 10.6 메모리 관리의 세 종류 10.6.1 객체 할당 및 해제 10.6.2 배열 할당 및 해제 10.7 내용 정리 연습문제 Chapter 11 추상 데이터 타입 정의하기 11.1 Vec 클래스 11.2 Vec 클래스 구현하기 11.2.1 메모리 할당 11.2.2 생성자(Constructors) 11.2.3 타입 정의 11.2.4 인덱스 및 size 11.2.5 반복자를 리턴하는 연산 11.3 Copy 처리하기 11.3.1 Copy 생성자 11.3.2 대입(Assignment) 11.3.3 대입은 초기화가 아니다 11.3.4 소멸자(Destructor) 11.3.5 디폴트 연산(Default operations) 11.3.6 세 법칙(rule of three) 11.4 동적인 Vec 11.5 융통성있는 메모리 관리 11.5.1 최종 Vec 클래스 11.6 내용 정리 연습문제 Chapter 12 값(value)처럼 동작하는 클래스 객체 만들기 12.1 단순한 문자열 클래스 12.2 자동 변환(Automatic conversions) 12.3 Str 연산들 12.3.1 입·출력 연산자들 12.3.2 프렌드(Friend) 12.3.3 다른 이항 연산자들 12.3.4 혼합-타입 표현식(Mixed-type expressions) 12.3.5 이항 연산자 설계하기 12.4 어떤 변환은 위험하다 12.5 변환 연산자 12.6 변환 및 메모리 관리 12.7 내용 정리 연습문제 Chapter 13 상속 및 동적 바인딩 사용하기 13.1 상속(Inheritance) 13.1.1 보호정책(protection)에 대해서 다시 살펴보기 13.1.2 연산 13.1.3 상속 및 생성자 13.2 다형성(Polymorphism) 및 virtual 함수 13.2.1 객체의 타입을 모르는 상태에서 값을 얻기 13.2.2 동적 바인딩(Dynamic binding) 13.2.3 요약 13.3 상속을 통해 문제 해결하기 13.3.1 알지 못하는(가상적으로) 타입에 대한 컨테이너 13.3.2 가상 소멸자(Virtual destructor) 13.4 간단한 핸들 클래스(handle class) 13.4.1 핸들 읽기 13.4.2 핸들 객체 복사 13.5 핸들 클래스 사용하기 13.6 미묘한 부분들 13.6.1 상속 및 컨테이너 13.6.2 어떤 함수를 원하나요? 13.7 내용 정리 연습문제 Chapter 14 메모리를 (거의) 자동으로 관리하기 14.1 객체를 복사하는 핸들 14.1.1 제네릭 핸들 클래스(generic handle class) 14.1.2 제네릭 핸들 사용하기 14.2 레퍼런스 카운트되는 핸들 14.3 데이터를 공유해야 될 때가 언제인지를 알려주는 핸들 14.4 제어가능 핸들에 대한 개선 14.4.1 제어할 수 없는 타입 복사하기 14.4.2 언제 복사가 필요할까요? 14.5 내용 정리 연습문제 Chapter 15 문자 그림 다시 살펴보기 15.1 설계 15.1.1 상속을 사용하여 구조 모델링하기 15.1.2 Pic_base 클래스 15.1.3 파생 클래스 15.1.4 복사 제어(Copy control) 15.2 구현 15.2.1 사용자 인터페이스 구현하기 15.2.2 String_Pic 클래스 15.2.3 출력에 칸 삽입하기(padding) 15.2.4 VCat_Pic 클래스 15.2.5 HCat_Pic 클래스 15.2.6 Frame_Pic 클래스 15.2.7 friend를 잊지 마세요 15.3 내용 정리 연습문제 Chapter 16 이제 어디로 갈까요? 16.1 자기만의 추상개념을 사용할 것 16.2 더 많이 배울 것 연습문제 부록 A 언어 세부사항 A.1 선언문(Declarations) A.1.1 지정자(Specifiers) A.1.2 선언자(Declarators) A.2 타입(Types) A.2.1 정수형 타입(Integral types) A.2.2 부동 소수점 실수(Floating point) A.2.3 상수 표현식(Constant expressions) A.2.4 변환(Conversions) A.2.5 열거형 타입(Enumerated types) A.2.6 오버로딩(Overloading) A.3 표현식(Expressions) A.3.1 연산자(Operators) A.4 구문(Statements) 부록 B 라이브러리 요약 B.1 입력-출력(Input-output) B.2 컨테이너와 반복자(Containers and iterators) B.2.1 일반적인 컨테이너 연산 B.2.2 순차적 컨테이너(Sequential containers) B.2.3 추가적인 순차적 연산 B.2.4 연관 컨테이너(Associative containers) B.2.5 반복자(Iterators) B.2.6 vector B.2.7 list B.2.8 string B.2.9 pair B.2.10 map B.3 알고리즘(Algorithms) 찾아보기 |
|
처음 이 책의 제목을 보았을 때, 아! 이 책은 C++의 성능 최적화에 대한 책이구나 하고 착각했었습니다. 어떻게 하면 빠른 수행속도를 갖는 C++ 프로그램을 만들 수 있는지에 대한 내용인줄로만 알고 있었습니다. 사실, 그래서 처음 관심을 가지게 된 것이긴 합니다.
처음에는 이 책에서 C++의 기본 내용을 다룬다는 것을 알고, 만만하게 보았습니다. 하지만, 책장을 한 장 한 장 넘기면서, 역자가 어렵게 알게 된 내용이나 어렴풋하게만 알고 있던 주제들을 다루고 있다는 사실을 알고 놀라게 되었습니다. 역자도 C++을 시작한 시간으로만 따지자면, 꽤 되었다고 말할 수 있는데, 이 책의 내용이나 설명 방식이 많은 도움이 되었을 정도니 말입니다. 그렇다고, 해서 어려운 주제들만 다룬다는 것은 아닙니다. 이 책은 분명 C++의 기본적인 내용을 다룹니다. 단지, 책을 진행하는 과정에서 자연히 실무적인 내용들을 해결할 수 있는 능력을 키워나가게 된다는 것입니다. 이 책으로 C++를 배우는 사람은 정말 엄청난 시간을 단축시킬 수 있을 것 같은 느낌을 받았습니다. 이 책 한권으로도 웬만한 현업 C++ 개발자 수준에 도달할 수 있을 것 같습니다. 역자가 처음 C++을 공부할 당시에 왜 이런 책이 나와주지 않았을까, 혹은 차라리 이 책이 나올 때까지 놀고 있다가, 이 책으로 C++를 처음 시작해도 늦지 않았을텐데 하는 생각을 해볼 정도입니다. 이 책은 처음부터 C++를 다룹니다. 물론, 이 책이 C++ 책이기 때문에 당연히 C++를 설명하는 것은 맞습니다. 하지만, 기존의 책과는 달리 문법 위주로 설명하는 것이 아니라, 실질적인 예제를 통해 접근합니다. 이렇게 설명해 놓고 보니, 새로 나온 영어 참고서 소개하는 것 같긴 하지만, 일단 확실한 것은 기존의 방법과는 많이 다르다는 것입니다. 또한, 저자들이 실제로 수년간 C++를 강의하면서 확인한 검증 받은 방식이라는 점입니다. 이 책을 손에 쥔 당신은 정말 행운아입니다. C++를 처음 시작하는 사람이든, C++를 어느 정도 하긴 하는데, 뭔가 2% 부족하다고 생각하는 사람이든, 이 책을 읽는 순간 업그레이드되고 있다는 것을 체감하게 될 것입니다. --- 역자의 말 |
|
감수의 글
감수의 글
"문법이 너무 복잡하고 배우기 어려워"
"프로그래머를 위한 편의가 되어 있지 않다고?" "쓸만한 라이브러리가 없다. 어떻게 모든 것을 처음부터 만드냐?" "객체지향의 탈을 쓴 절차지향 언어잖아. 이건 절름발이 언어야" "나온 지가 얼마나 됐는데. 그걸 왜 써?" 이런 이야기를 들으면서 감수자가 C++를 써온 지 올해로 10년이 되었다. 아무 생각 없이 '아는 대로' 산 세월도 있었고, 다른 언어를 써보기도 했었다. 하지만 어딘가 허전한 '거시기'가 마음 한 편에 자리잡고 있던 1998년의 어느 날, 우연히 ANSI C++의 최종 표준안이 승인되었다는 기사를 접했다. C++의 쇼타임은 이제부터가 아닌가... 힘들게 살아온 세월만큼, C++는 많은 변화를 겪었다. 하지만 "객체지향 개념을 도입하되, 이전의 효율은 떨어뜨리지 않는다"라는 비얀 스트롭스트럽(Bjarne Stroustrup)의 초기 철학은 그대로 변하지 않은 채로 "제네릭 프로그래밍(generic programming)"이란 최강의 시스템으로 중무장했고, 이 시스템을 기반으로 만들어진 표준 템플릿 라이브러리를 초정예 기갑부대로 내세워 프로그래머를 유혹하고 있다. 하지만 여전히 수 년간 박혀온 C++에 대한 일반 프로그래머의 선입관은 아직도 C++를 '공부할 시간도 없는데, 들인 시간만큼 얻는 것이 없는' 무서운 언어로 비쳐지게 하고 있다. 이에, C++를 최소한의 시간으로, 가장 효과적으로 공부할 수 있는 학습서 시리즈를 우리나라 개발자에게 소개하게 될 기회를 가지게 되어 또 다시 '거시기'한 기분이다. C++ In Depth 시리즈는 C++의 창시자인 비얀 스트롭스트럽이 직접 시리즈 편집자를 맡아 기획한 C++ 학습서이다. 기본 프로그래밍, 설계 기법, 활용 라이브러리, 프로그래밍 지침 및 테크닉을 모두 포괄하여 기획된 본 시리즈는 독자에게 부담을 주지 않는 분량 제목에 부합하는 만큼의 내용 참고 자료를 찾아볼 필요가 없는 구성 시리즈 내 도서의 상호 참조를 통한 높은 결합도 라는 특징을 가지고 출간되었으며, 이름만 들어도 모두 고개를 끄덕일만한 수준의 쟁쟁한 엔지니어 겸 학자로 구성된 최강의 필진을 자랑한다. C++를 기본부터 다시 찬찬히 다지고 싶은 초심자, 업계 수준의 프로그래밍 테크닉을 접하고자 하는 엔지니어나 연구자들, C++의 최근 쓰임새를 알아보고자 하는 프로그래머 등, 모두에게 만족을 주리라 생각하고 자신 있게 추천하는 바이다. Accelerated C++는 앤드류 쾨니그(Andrew Koenig)와 바바라 무(Babara Moo)가 쓴 C++ 기초 학습서이다. 문법이나 구문 설명에 치우친 과거의 C++ 학습서의 껍질을 벗고 핵심적인 C++ 표준 라이브러리 사용을 중심으로 깔끔하게 풀어가는 참신한 구성을 취하고 있으며, 중요한 구문 설명도 놓치지 않는다. 제목 그대로 C++ 학습을 가속시킬 수 있는 책으로서, C++를 어중간하게 알고 있는 분이나 웬만큼 안다고 생각하는 분들에게도 크게 어필할 수 있을 것으로 생각한다. |