객체지향 초심자도 이해하기 쉬운 디자인 패턴 입문서
프로그래밍을 하다 보면 예전과 같은 일을 반복하고 있다고 느낄 때가 있다. 경험이 늘어 갈수록 이러한 ‘패턴’이 자신의 머릿속에 많이 축적되고, 그 ‘패턴’을 다음 개발에 적용할 수 있게 된다. 갱스 오브 포(Gangs of Four) 혹은 GoF라고 불리는 네 사람은 이러한 개발자의 ‘경험’이나 ‘내적인 축적’을 ‘디자인 패턴’이라는 형태로 정리했다.
『JAVA 언어로 배우는 디자인 패턴 입문』은 GoF가 정리한 23개의 디자인 패턴을 하나씩 설명하면서 객체지향을 잘 모르는 초보자도 이해하기 쉽도록 정리한 디자인 패턴 입문서이다. 단순히 논리나 이론만 제시하는 것이 아니라, 디자인 패턴을 사용한 구체적인 예제 프로그램을 Java 언어로 기술하고 실제로 동작시켜 본다. 2002년 초판으로부터 20년, 2008년 개정증보판으로부터 14년 만에 출간된 이번 3판은 예제 프로그램을 Java 언어의 발전에 맞추어 업데이트했고, 동시에 본문 내용도 전면적으로 재검토했다.
디자인 패턴은 먼 미래를 위해 배우는 것이 아니다. 디자인 패턴은 우리가 매일 사용하는 프로그램을 새로운 관점에서 재검토하여 재사용하기 쉽고, 기능을 확장하기 쉬운 소프트웨어를 만들기 위한 유익한 기법이다. 이 책으로 디자인 패턴에 대한 이해를 넓히고 자바 개발자로서 한층 더 성장할 수 있을 것이다.
1부 | 디자인 패턴에 익숙해지다
Part 1 Iterator - 처리를 반복하다
Part 2 Adapter - 사이에 끼워 재사용한다
2부 | 하위 클래스에 맡기다
Part 3 Template Method - 하위 클래스에서 구체적으로 처리한다
Part 4 Factory Method - 하위 클래스에서 인스턴스를 만든다
3부 | 인스턴스를 만들다
Part 5 Singleton - 인스턴스를 단 하나만 만든다
Part 6 Prototype - 복사해서 인스턴스를 만든다
Part 7 Builder - 복잡한 인스턴스를 조립한다
Part 8 Abstract Factory - 관련 부품을 조합하여 제품을 만든다
4부 | 나누어 생각하다
Part 9 Bridge - 기능 계층과 구현 계층을 나눈다
Part 10 Strategy - 알고리즘을 모두 바꾼다
5부 | 동일시하다
Part 11 Composite - 그릇과 내용물을 동일시한다
Part 12 Decorator - 장식틀과 내용물을 동일시한다
6부 | 데이터 구조를 돌아다니다
Part 13 Visitor - 데이터 구조를 돌아다니면서 처리한다
Part 14 Chain of Responsibility - 책임을 떠넘긴다
7부 | 단순화한다
Part 15 Facade - 단순한 창구를 만든다
Part 16 Mediator - 중재자를 통해서 처리하다
8부 | 상태를 관리하다
Part 17 Observer - 상태 변화를 알려 준다
Part 18 Memento - 상태를 저장한다
Part 19 State - 상태를 클래스로 표현한다
9부 | 낭비를 없애다
Part 20 Flyweight - 같은 것은 공유해서 낭비를 없앤다
Part 21 Proxy - 필요해지면 만든다
10부 | 클래스로 표현한다
Part 22 Command - 명령을 클래스로 표현한다
Part 23 Interpreter - 문법 규칙을 클래스로 표현한다
▶ 3판에서 달라진 점
·예제 프로그램을 현대 Java 언어(람다식, 확장 for문, enum형 등)로 업데이트
·이해하기 쉽게 설명하되 현대의 관점에서 예제와 설명(의존성 주입, 보안 관련 설명 등) 수정
·고전적인 디자인 패턴 23개는 그대로 다루면서 대응하는 예제 프로그램도 심플하게 유지
▶ 이 책의 독자
·객체지향에 관심이 있는 사람
·디자인 패턴에 관심이 있는 사람 (특히 GoF 책을 보고 어렵다고 느낀 사람)
·Java 프로그래머 (특히 추상 클래스나 인터페이스가 잘 이해되지 않는 사람)
▶ 이 책의 구성
Part 1 Iterator - 처리를 반복한다
여러 요소가 모여 있는 집합에서 순서대로 요소를 처리하는 Iterator 패턴을 학습합니다.
Part 2 Adapter - 사이에 끼워 재사용한다
서로 다른 인터페이스(API)의 클래스를 연결하는 Adapter 패턴을 학습합니다
Part 3 Template Method - 하위 클래스에서 구체적으로 처리한다
상위 클래스에서 기능의 뼈대를 정의하고, 하위 클래스에서 세부 처리를 구현하는 Template Method 패턴을 학습합니다.
Part 4 Factory Method - 하위 클래스에서 인스턴스를 만든다
상위 클래스에서는 인스턴스를 생성하는 방법을 결정하고, 하위 클래스에서 인스턴스를 생성하는 Factory Method 패턴을 학습합니다.
Part 5 Singleton - 인스턴스를 단 하나만 만든다
인스턴스가 하나만 존재하는 Singleton 패턴을 학습합니다.
Part 6 Prototype - 복사해서 인스턴스를 만든다
원형이 되는 인스턴스를 복사해서 인스턴스를 만드는 Prototype 패턴을 학습합니다.
Part 7 Builder - 복잡한 인스턴스를 조립한다
복잡한 인스턴스를 단계적으로 조립하는 Builder 패턴을 학습합니다.
Part 8 Abstract Factory - 관련 부품을 조합하여 제품을 만든다
공장처럼 부품을 조합하여 인스턴스를 생성하는 Abstract Factory 패턴을 학습합니다.
Part 9 Bridge - 기능 계층과 구현 계층을 나눈다
두 종류의 확장이 혼재하는 프로그램을 기능 계층과 구현 계층으로 나누고, 그 사이에서 중개 역할을 하는 Bridge 패턴을 학습합니다.
Part 10 Strategy - 알고리즘을 모두 바꾼다
알고리즘을 싹 바꿔서 개선하기 쉽게 만드는 Strategy 패턴을 학습합니다.
Part 11 Composite - 그릇과 내용물을 동일시한다
그릇과 내용물을 동일시하여 재귀적인 구조를 구축하는 Composite 패턴을 학습합니다.
Part 12 Decorator - 장식틀과 내용물을 동일시한다
장식과 내용물을 동일시하여 장식틀을 여러 겹으로 겹치는 Decorator 패턴을 학습합니다.
Part 13 Visitor - 데이터 구조를 돌아다니면서 처리한다
데이터 구조를 돌아다니면서 같은 조작을 반복해서 적용하는 Visitor 패턴을 학습합니다.
Part 14 Chain of Responsibility - 책임을 떠넘긴다
복수의 객체가 연결된 체인 안에서 작업하는 Chain of Responsibility 패턴을 학습합니다.
Part 15 Facade - 단순한 창구를 만든다
복잡하게 얽힌 클래스를 개별적으로 제어하는 것이 아니라, 창구 역할을 하는 클래스를 하나 배치함으로써 시스템 전체의 조작성을 좋게 만드는 Facade 패턴을 학습합니다.
Part 16 Mediator - 중재자를 통해 처리한다
복수의 클래스가 서로 직접 소통하지 않고, 중개 역할을 하는 클래스를 하나 준비해 그 클래스하고만 의사 소통을 하게 해서 프로그램을 단순하게 만드는 Mediator 패턴을 학습합니다.
Part 17 Observer - 상태 변화를 알려 준다
상태가 변화하는 클래스와 그 변화를 통지받는 클래스를 분리해 생각하는 Observer 패턴을 학습합니다.
Part 18 Memento - 상태를 저장한다
현재 상태를 저장하고 필요할 때 복귀시켜, Undo 기능을 할 수 있게 하는 Memento 패턴을 학습합니다.
Part 19 State - 상태를 클래스로 표현한다
상태를 클래스로 표현하고 상태에 따른 분기 처리를 줄여 주는 State 패턴을 학습합니다.
Part 20 Flyweight - 같은 것은 공유해서 낭비를 없앤다
여러 곳에서 같은 것이 등장할 때 그것들을 공유해서 낭비를 없애는 Flyweight 패턴을 학습합니다.
Part 21 Proxy - 필요해지면 만든다
정말로 목적한 것이 필요해질 때까지는 대리인을 시켜 처리를 진행하는 Proxy 패턴을 학습합니다.
Part 22 Command - 명령을 클래스로 표현한다
요구나 명령을 형태로 만들어 클래스로 표현하는 Command 패턴을 학습합니다.
Part 23 Interpreter - 문법 규칙을 클래스로 표현한다
문법 규칙을 클래스로 표현하는 Interpreter 패턴을 학습합니다.