13장 : 실전 디자인 패턴
객체마을 공식 가이드
널리 퍼져 있는 “디자인 패턴”의 정의에 대한 오해에 대해서 확실히 파악하고 넘어가자.
디자인 패턴 카탈로그에 대해 알아보고, 그런 카탈로그의 필요성을 제대로 파악하자.
적절한 시기에 디자인 패턴을 사용하도록 하자.
패턴을 제 범주에 맞게 사용하도록 하자.
패턴을 발견하는 것은 고수들만이 할 수 있는 일은 아니다.
대세를 따르자.
도사님으로부터 정신 수양법을 배우자.
패턴과 관련된 다양한 용어를 많이 익혀서 친구들 및 다른 개발자들에세 깊은 인상을 심어주자.
디자인 패턴
패턴이란 특정 컨텍스트 내에서 주어진 문제에 대한 해결책이다.
복습
데코레이터 패턴
객체를 감싸서 새로운 행동을 제공한다.
스테이트 패턴
상태를 기반으로 한 행동을 캡슐화하고 위임을 통해서 어떤 행동을 사용할지 결정한다.
이터레이터 패턴
컬렉션이 어떤 식으로 구현되었는지 드러내진 않으면서도 컬렉션 내에 있는 모든 객체에 대해 반복 작업을 처리할 수 있게 해 준다.
퍼사드 패턴
일련의 클래스에 대해서 간단한 인터페이스를 제공한다.
스트래티지 패턴
교환 가능한 행동을 캡슐화하고 위임을 통해서 어떤 행동을 사용할지 결정한다.
프록시 패턴
객체를 감싸서 그 객체에 재한 접근을 제어한다.
팩토리 메소드 패턴
생성할 구상 클래스를 서브클래스에서 결정한다.
어댑터 패턴
객체를 감싸서 다른 인터페이스를 제공한다.
옵저버 패턴
상태가 변경되면 다른 객체들한테 연락을 돌릴 수 있게 해준다.
템플릿 메소드 패턴
알고리즘의 개별 단계를 구현하는 방법을 서브클래스에서 결정한다.
컴포지트 패턴
클라이언트에서 객체 컬렉션과 개별 객체를 똑같이 다룰 수 있도록 해준다.
싱글턴 패턴
딱 한 객체만 생성되도록 한다.
추상 팩토리 패턴
클라이언트에서 구상 클래스를 지정하지 않으면서도 일군의 객체를 생성할 수 있도록 해준다.
커맨드 패턴
요청을 객체로 감싼다.
안티 패턴
어떤 문제에 대한 나쁜 해결책에 이르는 길을 알려준다.
분류
**
생성 관련 패턴(creational pattern)
**은 객체 인스턴스 생성을 위한 패턴으로, 클라이언트와 그 클라이언트에서 생성해야 할 객체 인스턴스 사이의 연결을 끊어주는 패턴이다.싱글턴
빌터
프로토타입
추상 팩토리
팩토리 메소드
**행동 관련 패턴(Behavioral Pattern)**
은 클래스와 객체들이 상호작용하는 방법 및 역할을 분담하는 방법과 관련된 패턴이다.템플릿 메소드
인터프리터
역할 변경
스트래티지
커맨드
비지터
미디에이터
이터레이터
메멘토
옵저버
스테이트
**구조 관련 패턴(Structural pattern)**
은 클래스 및 객체들을 구성을 통해서 더 큰 구조로 만들 수 있게 해 주는 것과 관련된 패턴이다.데코레이터
플라이웨이트
컴포지트
어댑터
프록시
퍼사드
브리지
핵심 정리
디자인 패턴이 자연스럽게 나올 수 있도록 하자. 패턴은 억지로 적용하면 안 된다.
디자인 패턴은 돌에 새겨진 글씨가 아니다. 필요에 따라 적당히 변형시켜서 사용하자.
주어진 조건을 만족시키는 가장 간단한 해결책을 사용하자. 디자인 패턴을 꼭 써야 하는 것은 아니다.
디자인 패턴 카탈로그를 읽어보고 패턴을 숙지하자. 패턴들 사이의 관계에 대해서도 확실히 이해해야 하낟.
패턴을 분류하여 패턴 그룹을 만들 수 있다. 그룹으로 나누는 것이 도움이 된다면 적극적으로 활용하자.
패턴 작가가 되려면 대단한 노력이 필요하다. 끈기 있게 오랜 시간에 걸쳐 끊임 없이 다듬다.
우리가 접할 패턴은 대부분 새로운 패턴이 아니고 기존 패턴을 응용한 것이다.
주변 사람들과 전문 용어를 공유하자. 공통의 언어로 얘기할 수 있다는 것은 패턴의 가장 큰 장점 가운데 중 하나다.
Last updated