본문 바로가기

Programming/디자인패턴

다시 정리하는 디자인패턴 (Head First Design Patterns)


GoF 디자인패턴이 다소 소화하기가 어려운 점에 비해 Head First Design Patterns 이라는 책을 알게되어 단숨에 읽어버린 책.. 

책을 이렇게 빨리 얽어본 적이 없었는데.. 내게도 이런면이 있을 줄이야..ㅎㅎ 

각설하고 책에 정리 되어있는 내용 바탕으로 정리한다.


1. 스트래티지 패턴 (Strategy Pattern)

   알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.

   스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.

 

2. 옵저버 패턴 (Observer Pattern)

   한 객체의 상태가 바뀌면 그 객체의 의존하는 다른객체들에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을      정의한다.

 

 * 느슨한 결합 Loose Coupling

   서로 상호작용을 하는 개체 사이에서는 가능하면 느슨하게 결합하는 디자인을 사용해야 한다.

 

3. 데코레이터 패턴 (Decorator Pattern)

   객체에 추가적인 요건을 동적으로 첨가한다. 

   데코레이터는 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공한다.

 

☞ OCP (Open-Closed Principle)

   클래스는 확장에 대해서는 열려 있어야 하지만 코드 변경에 대해서는 닫혀 있어야 한다.

 

4. 팩토리 패턴 (Factory Pattern)

 4.1 팩토리 메소드 패턴 (Factory Method Pattern)

   객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만든다. 

   팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡긴다.

 

 4.2 추상 팩토리 패턴 (Abstract Factory Pattern)

   인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지

  않고도 생성할 수 있다.

 

☞ 의존성 뒤집기 (Dependency Inversion)

   추상회된 것에 의존하도록 만들어라. 구상 클래스에 의존하도록 만들지 않도록 한다.

 

5. 싱글톤 패턴 (Singleton Pattern)

   해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴이다.

 

6. 커맨드 패턴 (Command Pattern)

  커맨드 패턴을 이용하면 요구 사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있   다.  

  또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업취소 기능도 지원 가능하다.

 

7. 어댑터 패턴 (Adapter Pattern)

  한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환 한다. 

  어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다.

 

8. 퍼사드 패턴 (Facade Pattern)

   어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공한다.

   퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있다.

 

☞ 최소 지식 원칙 (Principle of Least Knowlegde)

   정말 친한 친구하고만 얘기하라.

 

9. 템플릿 메소드 패턴 (Templet Method Pattern)

  메소드에서 알고리즘의 골격을 정의한다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있다. 

  템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의할 수 있다.

 

10. 이터레이터 패턴 (Iterator Pattern)

   컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법을 제공해 준다.

 

11. 컴포지트 패턴 (Composite Pattern)

   객체들을 트리 구조로 구성하여 부분과 전체를 나타내는 계층구조로 만들 수 있다.

   이 패턴을 이용하면 클라이언트에서 개별 객체와 다른 객체들로 구성된 복합 객체를 똑같은 방법으로 다룰 수 있다.

  

 응집도 (Cohesion)

    한 클래스 또는 모듈이 특정 목적 또는 역할을 얼마나 일관되게 지원하는지를 나타내는 척도이다.

 

12. 스테이트 패턴 (State Pattern)

   객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있다.

 

13. 프록시 패턴 (Proxy Pattern)

   어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴이다.