목차
1. 조직화하기 = 23
1.1 소프트웨어 공학 = 34
소프트웨어 생명주기 = 25
애자일 (Agile) 방법 = 28
질 좋은 소프트웨어의 목적 = 29
1.2 객체 지향 = 32
장점 = 33
Unified Method = 33
1.3 클래스, 객체 및 응용 = 34
클래스 = 34
객체 = 41
응용 = 42
1.4 클래스 조직화 = 45
상속 = 45
패키지 = 51
1.5 자료구조 = 55
구현에 종속적인 구조 = 56
구현에 독립적인 구조 = 57
자료구조는 무엇인가? = 60
1.6 기본적인 구조화 메커니즘 = 60
참조 = 61
배열 = 65
1.7 알고리즘의 비교: Big-O 분석 = 70
Big-O 표기 = 72
크기의 일반적인 차수 = 75
예 1: 연속적인 정수들의 합 = 76
예 2: 전화번호부에서 번호 찾기 = 78
결론 = 81
2. 추상화 데이터형 = 83
2.1 추상화 = 84
정보 은닉 = 85
데이터 추상화 = 85
데이터 레벨 = 87
사전 조건과 사후 조건 = 88
자바 인터페이스 = 90
2.2 StringLog ADT 명세 = 94
생성자 = 94
변환자 = 95
관찰자 = 95
StringLogInterface = 96
StringLogInterface의 사용 = 97
2.3 배열기반의 StringLog ADT 구현 = 100
인스턴스 변수 = 100
생성자 = 101
변환자 = 103
관찰자 = 106
2.4 소프트웨어 검사 = 114
검사사례 확인 = 115
검사 계획 = 117
ADT 구현에 대한 검사 = 117
2.5 연결리스트의 소개 = 125
배열과 연결리스트 = 125
LLStringNode 클래스 = 126
연결리스트에 대한 연산자 = 130
2.6 연결리스트를 이용한 StringLog ADT 구현 = 137
인스턴스 변수 = 139
생성자 (Constructors) = 140
변환자 (Transformers) = 140
관찰자 (Observer) = 143
2.7 소프트웨어 설계: 클래스의 식별 = 149
브레인스토밍(BrainStorming) = 149
필터 = 149
시나리오 분석 = 150
명사와 동사 = 150
응집력 있는 설계 (Cohesive Designs) = 151
방식에 대한 요약 = 151
설계 선택 = 153
2.8 사례연구 : 퀴즈 게임 = 153
Trivia 게임 소스 = 154
Support 클래스 식별 = 156
Support 클래스 구현 = 159
TriviaGame Application = 166
사례 연구 요약 = 170
요약 = 171
연습 문제 = 171
3. 스택 ADT = 185
3.1 스택 = 186
스택의 동작들 = 187
스택 사용하기 = 188
3.2 컬렉션 요소 = 190
일반적으로 사용되는 컬렉션 = 190
3.3 예외사항 = 194
예외 상황 다루기 = 194
예외와 ADT: 사례 = 195
오류 상황과 ADT = 201
3.4 형식 명세서 = 203
예외 상황들 = 203
인터페이스 = 206
3.5 응용: 잘 조직된 표현식 = 211
균형 클래스 = 212
응용 프로그램 = 217
3.6 배열 기반 구현 = 220
ArrayStack 클래스 = 220
스택 연산의 정의 = 222
검사 계획 = 224
3.7 연결 기반 구현 = 228
LLObjectNode 클래스 = 298
LlnkedsSack 클래스 = 230
push 연산 = 232
팝 연산 = 234
다른 스택 연산들 = 237
스택 구현의 비교 = 239
3.8 사례 연구: 후위 표기식(Postfix Expression) 계산기 = 240
논의 = 241
후위 표기식의 계산 = 241
후위 표기식 계산 알고리즘 = 243
명세서: 프로그램 후위 계산 = 246
브레인스토밍(brainstorming)과 필터링(filtering) = 247
PostFixEvaluator 클래스 = 249
PFixConsole 클래스 = 251
후위 표기식 계산기 검사작업 = 253
요약 = 255
연습문제 = 256
4. 재귀 = 273
4.1 재귀적 정의, 알고리즘, 프로그램 = 274
재귀적 정의 = 274
재귀 알고리즘 = 276
재귀 프로그램 = 279
4.2 세 가지 질문 = 282
재귀 알고리즘의 검증 = 283
재귀 메소드의 작성 = 284
재귀 메소드를 디버그 = 285
4.3 하노이 탑(Towers of Hannoi) = 286
알고리즘 = 286
메소드 = 287
프로그램 = 289
4.4 블롭 세기 = 292
블롭 생성 = 293
계산 알고리즘 = 294
마크 알고리즘 = 295
격자 클래스 = 297
프로그램 = 299
4.5 재귀적 연결리스트 처리 = 301
역 프린팅 = 301
4.5 재귀의 제거 = 306
재귀가 어떻게 작동하는가 = 306
반복 = 311
스태킹(stacking) = 312
4.7 재귀 해결책을 사용할 지의 결정 = 314
재귀 오버헤드 = 314
비효율적 알고리즘 = 315
명료성 (clarity) = 317
요약 = 318
연습문제 = 319
5. 큐(Queue) ADT = 331
5.1 큐 (queue) = 332
큐에서의 연산 = 333
큐의 사용 = 334
5.2 공식적 명세 = 335
5.3 응용: 회문(palindromes) = 338
Palindrome 클래스 = 339
응용 프로그램 = 341
5.4 배열 기반 구현 = 344
ArrayBndQueue 클래스 = 344
ArrayUnbndQueue 클래스 = 351
5.5 응용: War 카드 게임 = 354
RankCardDeck 클래스 = 355
WarGame 클래스 = 357
WarGameAPP 클래스 = 361
5.6 연결리스트 기반의 구현 = 365
Enqueue 연산 = 366
Dequeue 연산 = 368
큐 구현 = 370
원형 연결 큐 설계 = 371
큐 구현의 비교 = 372
5.7 사례 연구: 평균 대기 시간 = 374
문제 논의 = 375
프로그램 설계 = 377
프로그램 상세 = 381
테스트 고려 사항들 = 391
요약 = 392
연습문제 = 394
6. 리스트 ADT = 403
6.1 객체 비교 방법 = 404
equals 메소드 = 405
Comparable 인터페이스 = 406
6.2 리스트 = 409
리스트의 다양성 (Varieties of Lists) = 410
이 책에서 다루는 리스트의 가정 = 411
6.3 리스트의 정형 명세 = 411
The ListInterface = 411
특화 인터페이스(Specialized Interface) = 415
사용 예 = 418
6.4 배열 기반 구현 = 420
List 클래스 = 421
ArrayUnsortedList 클래스 = 426
ArraySortedList 클래스 = 429
ArrayIndexedList 클래스 = 436
6.5. 응용: 포커, 골프와 뮤직 = 440
포커 (Poker) = 440
골프 = 444
음악 = 448
6.6 이진 탐색 알고리즘 = 452
정렬리스트에서 선형 검색의 개선 = 452
이진 탐색 알고리즘 = 453
재귀적 이진 검색 (Recursive Binary Search) = 458
효율성 분석 = 460
6.7. 참조 기반 구현 = 461
RefList 클래스 = 462
RefUnsortedList 클래스 = 468
RefSortedList 클래스 = 470
6.8 객체와 구조체를 파일에 저장하기 = 475
객체 자료를 문장 파일에 저장하기 = 476
객체의 직렬화(serialization of objects) = 477
구조체를 직렬화하기 = 481
응용 프로그램: 음반 리스트 = 481
요약 = 489
연습문제 = 490
7. 부가 리스트 ADT = 507
7.1 원형 연결리스트(circular linked lists) = 508
무정렬 원형 리스트 = 509
CRefList 클래스 = 511
반복자 메소드 = 511
GRefUnsortedList 클래스 = 516
원형 연결리스트 vs 선형 연결리스트 = 518
7.2 이중 연결리스트(doubly linked list) = 519
add와 remove 명령 = 521
7.3 머리 노드와 꼬리 노드를 갖는 연결리스트 = 524
7.4 노드들을 위한 배열로써의 연결리스트 = 525
배열을 왜 사용하는가? = 526
배열이 어떻게 사용되는가? = 526
7.5 특화 리스트 ADT = 534
명세 = 535
구현 = 537
7.6 사례 연구: 아주 큰 정수(large Integer) = 542
LargeInt 클래스 = 546
더하기와 빼기 = 548
시험 계획 = 557
LargeIntApp 프로그램 = 558
요약 = 561
연습문제 = 562
8. 이진 검색 트리(Binary Search Trees) = 571
8.1 트리(Trees) = 572
이진 트리(Binary Trees) = 574
이진 검색 트리(Binary Search Trees) = 577
이진 트리 순회 (Binary Tree Traversals) = 579
8.2 논리적 단계(The Logical Level) = 581
트리의 원소(Tree Elements) = 581
이진 검색 트리 명세화 (The Binary Search Tree Specification) = 582
8.3 응용 프로그래밍 레벨(The Application Level) = 584
8.4 구현 레벨 = 587
8.5 반복적 방식과 재귀적 방식의 메소드 구현 = 590
재귀적 방식을 이용한 size 메소드 구현 = 591
반복적 방법을 이용한 size 메소드 구현 = 594
재귀적 방식과 반복적 방식의 비교 = 597
8.6 구현 레벨: 기타 연산들 = 598
contains 연산과 get 연산 = 598
삽입 연산 구현 = 602
삭제 연산 = 607
반복적 방식 = 614
Testing Binary Search Tree Operations = 619
8.7. 이진 검색 트리와 선형 리스트 비교 = 621
시간 복잡도 (Big-O) 비교 = 621
8.8 이진 검색 트리의 균형 = 623
8.9 이진 트리의 비 연결 표현 = 629
8.10 사례연구: 단어 빈도 분석기 = 633
Problem = 633
Discussion = 633
Brainstorming = 634
Filtering = 634
The User Interface = 635
Error Handling = 635
Scenario Analysis = 635
The WordFreq Class = 637
단어 빈도 분석 프로그램 = 639
Testing = 641
요약 = 643
연습문제 = 643
9. 우선 큐, 힙, 그래프 = 657
9.1 우선 큐 = 658
논리적 단계 = 658
응용 레벨 = 661
구현 레벨 = 661
9.2 힙(Heap) = 662
힙 구현 = 666
앤큐 메소드 = 668
디큐 메소드 = 671
힙 vs 우선 큐의 다른 표현들 = 676
9.3 그래프 개요 = 677
9.4 그래프 ADT의 형식 명세 = 682
9.5 그래프 응용 = 684
깊이 우선 탐색(Depth-First Searching) = 685
넓이 우선 탐색(Breadth-First Searching) = 688
단일 소스 최단 경로 문제(The Single-Source Shortest-Paths Problem) = 692
9.6 그래프의 여러 구현 방법 = 700
배열을 기반으로 한 구현 = 700
연결리스트 구현 = 705
요약 = 707
연습문제 = 708
10. 정렬 및 검색 알고리즘 = 719
10.1 정렬 = 720
10.2 간단한 정렬 = 724
연속적인 선택 정렬 (Straight Selection Sort) = 724
버블정렬 (Bubble Sort) = 730
삽입정렬 (Insertion Sort) = 735
10.3 O(Nlog2N)의 정렬 (O(Nlog2N) Sorts) = 739
Merge Sort = 739
퀵 정렬 (Quick Sort) = 747
힙 정렬 = 754
10.4 정렬과 관련된 추가적인 고려 사항 = 760
알고리즘 검사 = 760
알고리즘 효율성 = 761
객체와 참조 = 763
Comparable Interface의 사용 = 764
Comparator Interface의 사용 = 764
안정성(Stability) = 770
10.5 검색(Searching) = 772
선형검색(Linear Search) = 772
높은 확률 순서(High-probability Ordering) = 773
정렬리스트(Sorted Lists) = 774
10.6 해싱(Hashing) = 775
충돌(Collision) = 778
좋은 해시 함수의 선택 = 787
복잡도 = 791
요약 = 791
연습문제 = 792
부록 = 805
Appendix A = 806
Appendix B = 807
Appendix C = 808
Appendix D = 809
Appendix E = 810
Appendix F = 832
F.1 The Bounded Stack Interface = 833
F.2 The Bounded Stack Class = 835
F.3 The SapleApp Class = 838
색인 = 841