목차
제0장 오해와 혼란에서의 해방 = 21
제1부 객체지향 소프트웨어 개발이란? = 29
제1장 C 언어 프로그래머도 이해하는 : 클래스란 무엇인가? = 31
객체지향에 있어서 클래스의 위치와 그 구조 = 32
클래스와 프로그래밍 = 36
이 장의 정리 = 37
객체지향 전설 Ⅰ : "클래스는 만드는 것이 아니고 사용하는 것이다" = 38
제2장 '데이터'가 아니라 '클래스'인 이유 : 멤버 함수란? = 41
멤버 함수 = 42
멤버 함수의 역할 = 45
클래스의 정의 방법 및 사용 방법 = 54
멤버 함수의 정의 방법 = 57
클래스의 사용 방법 = 59
이 장의 정리 = 62
객체지향 전설 Ⅱ : "C 언어로도 객체지향 프로그래밍이 가능하다" = 63
제3장 객체지향 개발 : 개발자 입장에서의 장점은? = 65
왜 객체지향인 것인가? = 66
객체지향의 동기 = 67
뛰어난 소프트웨어란? = 67
시스템의 성장과 객체지향 = 68
객체지향 vs 구조화 = 72
객체지향 개발의 순서 = 75
분석, 설계란? = 78
이 장의 정리 = 81
객체지향 전설 Ⅲ : "객체지향은 구조화의 연장선상에 있는 기술이다" = 82
제2부 정적 분석 = 85
제4장 클래스 : 무엇이 클래스가 되는가? 그리고 되지 않는가? = 87
제2의 고개 = 88
객체지향과 시뮬레이션 = 89
클래스 뽑아내기 = 90
분석적 관점에서 본 클래스 = 95
클래스 다이어그램의 작성 = 96
클래스 명세의 범위 = 99
오퍼레이션의 추출 = 100
속성의 추출 = 102
클래스 후보에서 클래스가 되는 기준 = 104
타입과 클래스 = 105
다시 보는 객체지향과 시뮬레이션 = 107
모델링을 잘하기 위해서는 = 109
이 장의 마무리 = 110
표기법에 대해서 = 111
객체지향 전설 Ⅳ : "C++에는 정수 클래스가 없어서 OOPL로서는 아름답지 않다" = 112
우울한 프로그래머를 위한 C++ 언어 입문 1 : new와 delete = 114
제5장 관계 : 알려지지 않은 중요한 개념 = 121
관계 = 122
관계의 분석과 표기 방법 = 123
관계와 속성의 차이점 = 125
다중성 = 126
역할(Role) = 128
관계의 클래스화 = 129
실제 분석에서 관계의 클래스화 = 133
관계의 구현 = 134
단방향 관계와 양방향 관계 = 138
클래스 다이어그램의 완성 = 139
객체지향이 무엇인가? = 140
이 장을 마치며 = 141
객체지향 전설 Ⅴ : "객체지향 설계는 하위 접근(Bottom Approach) 방식이다" = 142
우울한 프로그래머를 위한 C++ 언어 입문 2 : 생성자(constructor)/소멸자(destructor) = 144
제6장 상속 : 프로그래밍을 하지 않고 프로그램을 만드는 방법 = 151
상속의 메커니즘 = 152
상속의 목적 = 153
일반화로서의 상속 = 154
왜? = 155
상속의 분석 = 156
상속의 기술 = 157
상속의 장점 = 159
특수화로서의 상속 = 161
프로그램 측면에서 상속의 예 = 163
커스터마이즈로서의 상속 = 164
상속한 클래스의 관리 = 168
이 장을 마치며 = 169
객체지향 전설 Ⅵ : "클래스의 관계에는 is-a 관계와 has-a 관계가 있다" = 172
우울한 프로그래머를 위한 C++ 언어 입문 3 : 상속 = 174
제7장 보다 수준 높은 분석 : 한층 더 깊이 시스템을 통찰하기 위해서 = 187
클래스 속성 = 188
클래스 속성이란 = 190
클래스에서 클래스 속성의 위치 = 191
클래스 속성의 구현 = 193
설계/구현에 있어서의 클래스 속성의 응용 = 197
파생 속성 = 198
파생 속성의 기술 = 200
집합 = 202
이것은 집합인가? = 204
집합의 구현 = 204
이 장을 마치며 = 206
우울한 클래스 다이어그램의 유지보수 = 208
제8장 다중 상속 : 여러 가지 모습을 가진 클래스의 본질을 알아보자 = 211
다중 상속 = 212
다중 상속이란 무엇인가? = 212
다중 상속이 표현하는 개념 = 213
다중 상속의 구현 = 215
다중 상속의 문제점 = 217
보다 심도 있는 분석 = 218
가상 기반 클래스 = 219
다중 상속 사용의 지침 = 224
그 외의 주의할 점 = 227
이 장을 마치며 = 228
정적 분석을 마치며 = 229
객체지향 전설 Ⅶ : "객체지향에서 제일 중요한 개념은 캡슐화, 상속, 다형성 이 세 가지이다" = 230
우울한 프로그래머를 위한 C++ 언어 입문 4 : 다형성 = 232
제3부 동적 분석 = 239
제9장 객체의 상태 : 객체의 변화를 관리하기 위한 방법 = 241
새로운 문제 = 242
전역 변수 = 243
상태 = 245
상태 관리의 실례 = 248
상태 전이 다이어그램을 프로그램에 응용하기 = 250
프로그램 부에서의 정의 = 252
상태 변화의 구현 = 254
이 장을 마치며 = 257
분석 설계 방법론 = 258
우울한 프로그래머를 위한 C++ 언어 입문 5 : friend = 261
제10장 한층 깊이 보는 상태 관리 : 유한 상태 머신의 본질을 따라잡기 위하여 = 267
보다 자세한 상태의 파악 = 268
자기 전이 = 270
출입 동작 = 272
상태의 계층화 = 274
병행 상태 = 279
조건부 상태 전이 = 281
정적 분석과의 관계 = 282
이 장을 마치며 = 285
UML = 288
우울한 프로그래머를 위한 C++ 언어 입문 6 : 클래스 템플릿 = 291
제11장 메시지 시퀀스 : 객체 연계의 파악 = 303
객체지향에서의 프로그램 동작 = 304
메시지 시퀀스의 분석 = 306
시퀀스 다이어그램 = 306
시퀀스 다이어그램의 기술 방법 = 308
시퀀스 다이어그램의 구체적인 예 = 312
시퀀스 다이어그램을 작성할 때의 주의 사항 = 314
협력 다이어그램 = 317
메시지 시퀀스 분석의 실제 = 319
이 장을 마치며 = 320
우울한 프로그래머를 위한 C++ 언어 입문 7
연산자 오버로드 = 322
유즈케이스 = 335
제4부 설계/구현 = 343
제12장 객체지향 설계 : 실제로 프로그램을 동작하기 위해서 = 345
객체지향 설계 = 347
문제 영역 이외의 클래스 = 347
OOSE에서의 클래스 분류 = 348
보다 실질적인 분류 = 350
사용자 인터페이스와 관계가 있는 클래스 = 350
객체지향과 UI = 351
UI의 구체적인 예 = 352
기존의 UI와 객체지향 UI = 355
특정의 처리를 하는 클래스 = 358
클래스의 애플리케이션 의존 = 361
서브시스템 분할 = 365
클래스의 상세화 = 366
이 장을 마치며 = 369
제13장 클래스 라이브러리 : 객체지향에 반드시 필요한 구현 기술 = 371
클래스 라이브러리 = 372
문자열의 클래스화 = 374
string 클래스 = 375
분석 레벨에서 본 문자열 클래스 = 384
컨테이너 클래스 = 385
컨테이너 클래스의 사용 용도 = 386
STL = 387
vector 클래스 템플릿 = 388
리스트(List) 클래스 템플릿 = 395
리스트 구조 = 395
반복자 = 397
리스트 클래스 템플릿의 사용 방법 = 400
객체지향적 관점에서 본 반복자 = 409
이 장을 마치며 = 410
객체지향 소프트웨어의 개발 = 411
우울한 프로그래머를 위한 C++ 언어 입문 8 = 413
대입 연산자 오버로드, 복사(copy) 생성자 = 413
제14장 실례 : 동작하는 프로그램을 작성하자 = 429
마방진 = 431
C 언어로의 구현 = 431
객체지향적 분석 = 437
명세 = 437
명사의 추출 = 438
관계 골라내기 = 440
오퍼레이션 골라내기 = 442
속성 골라내기 = 443
동적 분석 = 444
클래스 다이어그램 다듬기 = 450
설계 = 457
이 장을 마치며 = 465
객체지향의 미래 = 467
완성된 마방진의 샘플 프로그램 = 470
찾아보기 = 504