목차
Chapter 01. Iterator - 하나씩 열거하면서 처리한다 ... 37
   01. Iterator 패턴 ... 38
   02. 예제 프로그램 ... 39
      Aggregate 인터페이스 ... 39
      Iterator 인터페이스 ... 41
      Book 클래스 ... 42
      BookShelf 클래스 ... 42
      BookShelf Iterator 클래스 ... 43
      Main 클래스 ... 44
   03. Iterator 패턴에 등장하는 역활 ... 46
   04. 독자의 사고를 넓혀주는 힌트 ... 47
      구현에 상관없이 Iterator를 사용할 수 있다. ... 47
      추상 클래스나 인터페이스는 아무래도 서툴러서 ... 48
      Aggregate와 Iterator의 대응 ... 48
      'Next'는 착각하기 쉽다 ... 49
      'hasNext'도 착각하기 쉽다 ... 49
      다수의 Iterator ... 49
      다양한 종류의 Iterator ... 49
      deleteIterator는 필요 없다 ... 50
   05. Iterator 패턴과 관련된 패턴 ... 50
   06. 이장에서 학습한 내용 ... 50
   연습문제 ... 51
chapter 02. Adapter - 필요한 형태로 수정해서 재활용한다 ... 53
   01. Adapter 패턴 ... 54
   02. 예제 프로그램 (1) (상속을 이용한 것) ... 55
      Banner 클래스 ... 56
      Print 인터페이스 ... 57
      PrintBanner 클래스 ... 57
      Main 클래스 ... 58
   03. 예제 프로그램 (2) (위임을 사용한 것) ... 59
      Print 클래스 ... 60
      PrintBanner 클래스 ... 60
   04. Adapter 패턴에 등장하는 역할 ... 61
   05. 독자의 사고를 넓혀주는 힌트 ... 62
      어떤 경우에 사용할까 ... 62
      만약 소스가 없더라도 ... 63
      버전업과 호환성 ... 63
      기능이 동떨어진 클래스 ... 63
   06. Adapter 패턴과 관련된 패턴 ... 64
      Bridge 패턴(9장) ... 64
      Decorator 패턴(12장) ... 64
   07. 이 장에서 학습한 내용 ... 64
   연습문제 ... 65
Chapter 03. Template Method - 구체적인 처리를 하위 클래스에게 위임 ... 69
   01. Template Method 패턴 ... 70
      템플릿이란? ... 70
      Template Method 패턴 ... 70
   02. 예제 프로그램 ... 71
      AbstractDisplay 클래스 ... 72
      CharDisplay 클래스 ... 73
      StringDisplay 클래스 ... 74
      Main 클래스 ... 75
   03. Template Method 패턴에 등장하는 역할 ... 76
   04. 독자의 사고를 넓혀주는 힌트 ... 77
      로직을 공통화할 수 있다 ... 77
      상위 클래스와 하위 클래스의 제휴 ... 78
      하위 클래스를 상위 클래스와 동일시한다 ... 78
   05. Template Method 패턴과 관련된 패턴 ... 78
   06. 보강 : 클래스 계층과 추상 클래스 ... 79
      상위 클래스가 하위 클래스에게 요청 ... 79
      추상 클래스의 의의 ... 79
      상위 클래스와 하위 클래스의 협조 ... 80
   07. 이 장에서 학습한 내용 ... 80
   연습문제 ... 81
Chapter 04. Factory Method - 인스턴스 작성을 하위 클래스에게 위임 ... 83
   01. Factory Method 패턴 ... 84
   02. 예제 프로그램 ... 84
   03. Product 클래스 ... 86
      Factory 클래스 ... 86
      IDCard 클래스 ... 87
      IDCardFactory 클래스 ... 87
      Main 클래스 ... 88
   04. Factory Method 패턴에 등장하는 역할 ... 89
   05. 독자의 사고를 넓혀주는 힌트 ... 90
      프레임워크와 구체적인 내용 ... 90
      인스턴스 생성 - 메소드의 구현 방법 ... 91
      패턴 이용과 개발자간의 의사소통 ... 92
   06. Factory Method 패턴과 관련된 패턴 ... 93
   07. 이 장에서 학습한 내용 ... 93
   연습문제 ... 94
Chapter 05. Singleton - 단 하나의 인스턴스 ... 95
   01. Singleton 패턴 ... 96
   02. 예제 프로그램 ... 97
      Singleton 클래스 ... 97
      Main 클래스 ... 98
   03. Singleton 패턴에 등장하는 역할 ... 99
   04. 독자의 사고를 넓혀주는 힌트 ... 100
      왜 제한할 필요가 있는가 ... 100
      유일한 하나의 인스턴스는 언제 생성되는가 ... 100
   05. Singleton 패턴과 관련된 패턴 ... 100
   06. 이 장에서 학습한 내용 ... 101
   연습문제 ... 101
Chapter 06. Prototype - 복사해서 인스턴스를 만든다 ... 103
   01. Prototype 패턴 ... 104
   02. 예제 프로그램 ... 105
      Product 인터페이스 ... 106
      Manager 클래스 ... 107
      MessageBox 클래스 ... 108
      UnderlinePen 클래스 ... 109
      Main 클래스 ... 110
   03. Prototype 패턴에 등장하는 역할 ... 112
   04. 독자의 사고를 넓혀주는 힌트 ... 113
      클래스에서 인스턴스를 만들면 안되는 것일까 ... 113
      클래스 명은 속박인가 ... 114
   05. Prototype 패턴과 관련된 패턴 ... 114
   06. 보강 : clone 메소드와 java.lang.Cloneable 인터페이스 ... 115
      자바 언어의 clone ... 115
      clone 메소드는 어디에서 정의되어 있는가? ... 116
      cloneable이 요구하는 메소드는? ... 116
      clone 메소드는 피상적인 복사를 합니다 ... 116
   07. 이 장에서 학습한 내용 ... 117
   연습문제 ... 118
Chapter 07. Builder - 복잡한 인스턴스를 조립한다 ... 119
   01. Builder 패턴 ... 120
   02. 예제 프로그램 ... 120
      Builder 클래스 ... 121
      Director 클래스 ... 122
      TextBuilder 클래스 ... 123
      HTMLBuilder 클래스 ... 124
      Main 클래스 ... 125
   03. Builder 패턴에 등장하는 역할 ... 127
   04. Builder 패턴과 관련된 패턴 ... 129
   05. 독자의 생각을 넓혀주는 힌트 ... 130
      클래스가 알고 있는 것은 무엇인가 ... 130
      설계시에 결정할 수 있는 것과 결정할 수 없는 것 ... 130
      소스를 읽는 법과 수정하는 방법 ... 131
   06. 이 장에서 학습한 내용 ... 131
   연습문제 ... 132
Chapter 08. Abstract Factory - 관련된 부품을 조립해서 제품을 만든다 ... 133
   01. Abstract Factory 패턴 ... 134
   02. 예제 프로그램 ... 135
      추상적인 부품 : Item 클래스 ... 139
      추상적인 부품 : Link 클래스 ... 139
      추상적인 부품 : Tray 클래스 ... 140
      추상적인 제품 : Page 클래스 ... 140
      추상적인 공장 : Factory 클래스 ... 142
      공장을 사용해서 부품을 조립하여 제품을 만든다 : Main 클래스 ... 143
      구체적인 공장 : ListFactory 클래스 ... 144
      구체적인 부품 : ListLink 클래스 ... 145
      구체적인 부품 : ListTray 클래스 ... 146
      구제적인 제품 : ListPage 클래스 ... 147
   03. 예제 프로그램에 별도의 구체적인 공장을 추가 ... 148
      구체적인 공장 : TableFactory 클래스 ... 150
      구체적인 부품 : TableLink 클래스 ... 151
      구체적인 부품 : TableTray 클래스 ... 152
      구체적인 제품 : TablePage 클래스 ... 152
   04. Abstract Factory 패턴에 등장하는 역할 ... 153
   05. 독자의 사고를 넓혀주는 힌트 ... 154
   06. Abstract Factory 패턴과 관련된 패턴 ... 156
   07. 보강 : 인스턴스를 만드는 여러 가지 방법 ... 157
   08. 이 장에서 학습한 내용 ... 158
   연습문제 ... 159
Chapter 09. Bridge - 기능의 계층과 구현의 계층을 분리한다 ... 161
   01. Bridge 패턴 ... 162
      클래스 계층의 두 가지 역할 ... 162
   02. 예제 프로그램 ... 165
      기능의 클래스 계층 : Display 클래스 ... 166
      기능의 클래스 계층 : CountDisplay 클래스 ... 167
      구현의 클래스 계층 : DisplayImpl 클래스 ... 167
      구현의 클래스 계층 : StringDisplayImpl 클래스 ... 168
      Main 클래스 ... 169
   03. Bridge 패턴에 등장하는 역할 ... 170
   04. 독자의 사고를 넓혀주는 힌트 ... 171
   05. Bridge 패턴과 관련된 패턴 ... 173
   06. 이 장에서 학습한 내용 ... 173
   연습문제 ... 174
Chapter 10. Strategy - 알고리즘을 모두 교체하다 ... 177
   01. Strategy 패턴 ... 178
   02. 예제 프로그램 ... 178
      Hand 클래스 ... 179
      Strategy 인터페이스 ... 181
      WinningStrategy 클래스 ... 182
      ProdStrategy 클래스 ... 183
      Player 클래스 ... 185
      Main 클래스 ... 186
   03. Strategy 패턴에 등장하는 역할 ... 189
   04. 독자의 사고를 넓혀주는 힌트 ... 190
   05. Strategy 패턴과 관련된 패턴 ... 191
   06. 이 장에서 학습한 내용 ... 191
   연습문제 ... 192
Chapter 11. Composite - 그릇과 내용물의 동일시 ... 195
   01. Composite 패턴 ... 196
   02. 예제 프로그램 ... 197
      Entry 클래스 ... 198
      File 클래스 ... 199
      Directory 클래스 ... 200
      FileTreatmentException 클래스 ... 202
      Main 클래스 ... 203
   03. Composite 패턴에 등장하는 역할 ... 205
   04. 독자의 사고를 넓혀주는 힌트 ... 206
      복수와 단수의 동일시 ... 206
      add를 어디에 두어야하나 ... 207
      재귀적 구조는 여러 곳에서 등장합니다 ... 208
   05. Composite 패턴과 관련된 패턴 ... 209
   06. 이 장에서 학습한 내용 ... 209
   연습문제 ... 210
Chapter 12. Decorator - 장식과 내용물의 동일시 ... 211
   01. Decorator 패턴 ... 212
   02. 예제 프로그램 ... 212
      Display 클래스 ... 214
      StringDisplay 클래스 ... 214
      Border 클래스 ... 215
      SideBorder 클래스 ... 216
      FullBorder 클래스 ... 218
      Main 클래스 ... 219
   03. Decorator 패턴에 등장하는 역할 ... 220
   04. 독자의 사고를 넓혀주는 힌트 ... 222
      투과적인 인터페이스(API) ... 222
      내용물을 변경하지 않고 기능을 추가할 수 있습니다 ... 222
      동적인 기능 추가를 할 수 있습니다 ... 223
      단순한 물품 갖추기에서도 다양한 기능을 추가할 수 있습니다 ... 223
      java.io 패키지와 Decorator 패턴 ... 223
      작은 클래스가 증가합니다 ... 225
   05. Decorator 패턴과 관련된 패턴 ... 225
   06. 보강 : 상속과 위임에 있어서의 동일시 ... 225
      상속 - 하위 클래스와 상위 클래스를 동일시 ... 226
      위임 - 자신과 위양할 곳을 동일시 ... 226
   07. 이 장에서 학습한 내용 ... 228
   연습문제 ... 228
Chapter 13. Visitor - 구조 안을 돌아다니면서 일을 한다 ... 231
   01. Visitor 패턴 ... 232
   02. 예제 프로그램 ... 232
      Visitor 클래스 ... 233
      Acceptor 인터페이스 ... 234
      Entry 클래스 ... 235
      File 클래스 ... 236
      Directory 클래스 ... 236
      ListVisitor 클래스 ... 238
      FileTreatmentException 클래스 ... 239
      Main 클래스 ... 239
      Visitor와 Accepter의 상호 호출 ... 241
   03. Visitor 패턴에 등장하는 역할 ... 243
   04. 독자의 사고를 넓혀주는 힌트 ... 244
      더블 디스패치 ... 244
      왜 이렇게 복잡한 일을 해야하는가 ... 245
      The Open-Closed Principle - 확장에 대해서는 열고, 수정에 대해서는 닫는다 ... 245
      ConcreteVisitor 역할의 추가는 간단합니다 ... 246
      ConcreteAcceptor 역할의 추가는 곤란합니다 ... 246
      Visitor가 처리를 하기 위해서는 무엇이 필요한가 ... 247
   05. Visitor 패턴과 관련된 패턴 ... 247
   06. 이 장에서 학습한 내용 ... 248
   연습문제 ... 248
Chapter 14. Chain of Responsibility - 책임 떠넘기기 ... 253
   01. Chain of Responsibility 패턴 ... 254
   02. 예제 프로그램 ... 255
      Trouble 클래스 ... 256
      Support 클래스 ... 256
      NoSupport 클래스 ... 257
      LimitSupport 클래스 ... 258
      OddSupport 클래스 ... 259
      SpecialSupport 클래스 ... 259
      Main 클래스 ... 260
   03. Chain of Responsibility 패턴에 등장하는 역할 ... 262
   04. 독자의 사고를 넓혀주는 힌트 ... 263
      요구를 하는 사람과 요구를 처리하는 사람을 느슨하게 연결합니다 ... 263
      동적으로 연쇄의 형태를 바꿉니다 ... 263
      자신의 일에 집중할 수 있습니다 ... 264
      떠넘기기로 처리가 늦어지지 않을까? ... 264
   05. Chain of Responsibility 패턴과 관련된 패턴 ... 264
   06. 이 장에서 학습한 내용 ... 265
   연습문제 ... 265
Chapter 15. Facade - 간단한 창구 ... 267
   01. Facade 패턴 ... 268
   02. 예제 프로그램 ... 268
      Database 클래스 ... 270
      HtmlWriter 클래스 ... 271
      PageMaker 클래스 ... 273
      Main 클래스 ... 274
   03. Facade 패턴에 등장하는 역할 ... 275
   04. 독자의 사고를 넓혀주는 힌트 ... 276
      Facade 역할이 하는 일은 무엇일까 ... 276
      재귀적인 Facade 패턴의 적용 ... 277
      프로그래머가 Facade를 만들지 않는 이유 - 심리적 요인 ... 277
   05. Facade 패턴과 관련된 패턴 ... 277
   06. 이 장에서 학습한 내용 ... 278
   연습문제 ... 278
Chapter 16. Mediator - 상대는 하나뿐 ... 281
   01. Mediator 패턴 ... 282
   02. 예제 프로그램 ... 283
      Mediator 인터페이스 ... 286
      Colleague 인터페이스 ... 287
      ColleagueButton 클래스 ... 288
      ColleagueTextField 클래스 ... 289
      ColleagueCheckbox 클래스 ... 290
      LoginFrame 클래스 ... 291
      Main 클래스 ... 294
   03. Mediator 패턴에 등장하는 역할 ... 295
   04. 독자의 사고를 넓혀주는 힌트 ... 296
      분산이 재앙이 되는 경우 ... 296
      통신 경로의 증가 ... 296
      재사용할 수 있는 것은 무엇인가 ... 297
   05. Mediator 패턴과 관련된 패턴 ... 297
   06. 이 장에서 학습한 내용 ... 298
   연습문제 ... 298
Chapter 17. Observer - 상태의 변화를 통지한다 ... 299
   01. Observer 패턴 ... 300
   02. 예제 프로그램 ... 300
      Observer 인터페이스 ... 301
      NumberGenerator 클래스 ... 301
      RandomNumberGenerator 클래스 ... 302
      DigitObserver 클래스 ... 303
      GraphObserver 클래스 ... 304
      Main 클래스 ... 304
   03. Observer 패턴에 등장하는 역할 ... 305
   04. 독자의 사고를 넓혀주는 힌트 ... 307
      여기서도 교환 가능성이 등장합니다 ... 307
      Observer의 순서 ... 307
      Observer의 행위가 Subject에 영향을 줄 때 ... 308
      갱신을 위한 정보의 취급 ... 309
      '관찰'하는 것이 아니라 '통지'를 받고 있습니다 ... 310
      Model/View/Controller(MVC) ... 310
   05. 보강 : java.util.Observer 인터페이스 ... 310
   06. Observer 패턴과 관련된 패턴 ... 311
   07. 이 장에서 학습한 내용 ... 312
   연습문제 ... 312
Chapter 18. Memento - 상태를 보존한다 ... 315
   01. Memento 패턴 ... 316
   02. 예제 프로그램 ... 317
      Memento 클래스 ... 317
      Gamer 클래스 ... 319
      Main 클래스 ... 321
   03. Memento 패턴에 등장하는 역할 ... 324
   04. 독자의 사고를 넓혀주는 힌트 ... 326
      두 개의 인터페이스(API)와 액세스 제어 ... 326
      Memento를 몇 개 가질까? ... 327
      Memento의 유효기간은? ... 327
      Caretaker 역할과 Originator 역할을 분리하는 의미 ... 328
   05. Memento 패턴과 관련된 패턴 ... 328
   06. 이 장에서 학습한 내용 ... 329
   연습문제 ... 329
Chapter 19. State - 상태를 클래스로 표현한다 ... 331
   01. State 패턴 ... 332
   02. 예제 프로그램 ... 332
      금고경비 시스템 ... 332
      State 패턴을 사용하지 않는 유사 코딩 ... 334
      State 패턴을 사용한 유사 코딩 ... 335
      State 인터페이스 ... 336
      DayState 클래스 ... 338
      NightState 클래스 ... 339
      Context 인터페이스 ... 340
      SafeFrame 클래스 ... 340
      Main 클래스 ... 345
   03. State 패턴에 등장하는 역할 ... 346
   04. 독자의 사고를 넓혀주는 힌트 ... 347
      분할해서 통치해라 ... 347
      상태에 의존한 처리 ... 348
      상태변화는 누가 관리해야하나 ... 349
      자기모순이 발생하지 않습니다 ... 350
      새로운 상태를 추가하는 것은 간단 ... 350
      다수의 얼굴을 가진 인스턴스 ... 350
   05. State 패턴과 관련된 패턴 ... 351
   06. 이 장에서 배운 것 ... 352
   연습문제 ... 352
Chapter 20. Flyweight - 동일한 것을 공유해서 낭비를 없앤다 ... 355
   01. Flyweight 패턴 ... 356
   02. 예제 프로그램 ... 357
      BigChar 클래스 ... 360
      BigCharFactory 클래스 ... 361
      BigString 클래스 ... 363
      Main 클래스 ... 364
   03. Flyweight 패턴에 등장하는 역할 ... 365
   04. 독자의 사고를 넓혀주는 힌트 ... 366
      여러 곳에 영향이 미칩니다 ... 366
      intrinsic과 extrinsic ... 367
      관리되고 있는 인스턴스는 쓰레기수집(garbage collection)이 되지 않습니다 ... 368
      메모리 이외의 리소스 ... 369
   05. Flyweight 패턴과 관련된 패턴 ... 369
   06. 이 장에서 학습한 내용 ... 370
   연습문제 ... 371
Chapter 21. Proxy - 필요해지면 만든다 ... 373
   01. Proxy 패턴 ... 374
   02. 예제 프로그램 ... 374
      Printer 클래스 ... 376
      Printable 인터페이스 ... 377
      PrinterProxy 클래스 ... 378
      Main 클래스 ... 380
   03. Proxy 패턴에 등장하는 역할 ... 381
   04. 독자의 사고를 넓혀주는 힌트 ... 382
      대리인을 사용해서 스피드업 ... 382
      대리인과 본인을 분리할 필요가 있는가 ... 383
      대리와 위임 ... 383
      투과적이라는 것 ... 383
      HTTP Proxy ... 384
      다양한 Proxy ... 384
   05. Proxy 패턴과 관련된 패턴 ... 385
   06. 이 장에서 배운 것 ... 385
   연습문제 ... 386
Chapter 22. Command - 명령을 클래스로 만든다 ... 387
   01. Command 패턴 ... 388
   02. 예제 프로그램 ... 388
      Command 인터페이스 ... 390
      MacroCommand 클래스 ... 391
      DrawCommand 클래스 ... 392
      Drawable 인터페이스 ... 393
      DrawCanvas 클래스 ... 394
      Main 클래스 ... 395
   03. Command 패턴에 등장하는 역할 ... 399
   04. 독자의 사고를 넓혀주는 힌트 ... 401
      명령이 지니고 있어야하는 정보는? ... 401
      이력의 보존 ... 402
      어댑터 ... 402
   05. Command 패턴과 관련된 패턴 ... 405
   06. 이 장에서 학습한 내용 ... 405
   연습문제 ... 406
Chapter 23. Interpreter - 문법 규칙을 클래스로 표현한다 ... 407
   01. Interpreter 패턴 ... 408
   02. 미니 언어 ... 409
      미니 언어의 명령 ... 409
      미니 프로그램의 예 ... 410
      미니 언어의 문법 ... 414
      터미널 익스프레션과 논터미널 익스프레션 ... 415
   03. 예제 프로그램 ... 416
      Node 클래스 ... 417
      ProgramNode 클래스 ... 418
      CommandListNode 클래스 ... 420
      CommandNode 클래스 ... 421
      RepeatCommandNode 클래스 ... 422
      PrimitiveCommandNode 클래스 ... 423
      Context 클래스 ... 424
      ParseException 클래스 ... 426
      Main 클래스 ... 426
   04. Interpreter 패턴에 등장하는 역할 ... 428
   05. 독자의 사고를 넓혀주는 힌트 ... 429
      그밖에 어떤 미니 언어가 있을까 ... 429
      건너뛰고 읽을까, 그냥 읽을까 ... 430
   06. Interpreter 패턴과 관련된 패턴 ... 430
   07. 이 장에서 학습한 내용, 그리고 마지막으로 한마디 ... 431
   연습문제 ... 432
Appendix ... 433
   부록 A. 연습문제 해답 ... 434
   부록 B. 예제 프로그램의 실행순서 ... 522
   부록 C. GoF에 의한 디자인 패턴의 분류 ... 525
   부록 D. 참고문헌 ... 526
찾아보기 ... 529
닫기