본문 바로가기

프로그래밍/디자인패턴

Disign Pattern : 디자인 패턴의 개념




디자인 패턴의 개념


※Design Pattern의 분류와 종류

 기본 패턴(Fundamental Design Patterns)

  • 디자인 패턴 중에서도 가장 기본인 동시에 가장 중요한 패턴  
  • 종류 : 델리게이션(Delegation) 패턴, 인터페이스 패턴, 이뮤터블(Immutable)패턴, 마커 인터페이스(Marker Interface) 패턴, 프록시(Proxy) 패턴 등   

 생성 패턴(Creational Patterns)

  • 객체의 생성 방식을 결정하는데 포괄적인 솔루션을 제공하는 패턴    
  • 클래스 정의와 객체 생성 방식을 구조화, 캡슐화하는 방법을 제시한다.      
  • 객체 생성 과정을 추상화시킨다는 특성을 갖고 있으며 클래스의 재사용을 위해 상속보다는 컴포지션 기법을 보다 많이 사용한다.
  • 기본원리
                                    ① 시스템에서 사용하는 클래스 정보를 캡슐화
                                    ② 클래스에 의해 객체가 생성되는 방식  
  • 이점 : 전체적인 시스템 구성의 유동성이 향상되어 객체 행성 방식이 다양한 구조로 진행될 수 있다. 예를 들어, 객체의 구성을 컴파일 타임에 정적으로 정의할 수 있으며 필요에 따라 런타임에 동적으로 구성할 수 있다. 
  • 종류 : 팩토리 메쏘드(Factory Method) 패턴, 추상화 팩토리(Abstract Factory) 패턴, 프로토타입(Protytype) 패턴, 싱글턴(Singleton) 패턴, 오브젝트 풀(Object Pool) 패턴 등                                                                                              
  • 분류 패턴(Partitioning Patterns)
  • 분석 단계에서 일반적으로 생기는 문제를 해결하는데 적합하다.                                  
  • 복잡한 행위자(Actors)를 분류하거나 비교적 큰 기능을 분류해 여러 클래스로 정의하는 방식을 제시한다.                                  
  • 종류 : 계층적 초기화(Layered Initialization) 패턴, 필터(Filter) 패턴, 컴포지트(Composite) 패턴 등 
  •  구조화 패턴(Structural Patterns)

  • 다른 기능을 가진 객체가 협력을 통해 어떤 역할을 수행할 때, 객체를 조직화시키는 일반적인 방식을 제시한다.                                  
  • 클래스와 객체가 보다 대규모 구조로 구성되는 방법에 대한 해결안을 제시한다.                                 
  • 별도로 구성된 클래스 라이브러리를 통합하는데 유용하다.                                  
  • 생성 패턴과 달리 새로운 기능을 구현하기 위해 객체를 구성하는 방식 자체에 초점이 맞춰져 있다.                                
  • 런타임에 객체 컴포지션 구조를 변경할 수 있으며, 이를 통해 객체 구성에 유동성과 확작성을 추가할 수 있다.                                  
  • 종류 : 어댑터(Adapter) 패턴, 이터레이터(Iterator) 패턴, 브리지(Bridge) 패턴, 퍼케이드(Facade) 패턴, 플라이웨이트(Flyweight) 패턴, 디이나믹 링키지(Dynamic Linkage) 패턴, 가상 프록시(Virtual Proxy) 패턴 등  
  •  행위 패턴(Behavioral Patterns)

  • 객체의 행위를 조직화(organize), 관리(manage), 연합(combine)하는데 사용되는 패턴                                  
  • 객체간의 기능을 배분하는 일과 같은 알고리즘 수행에 주로 이용된다.                                  
  • 단지 객체나 클래스에 대한 유형을 정의하는 것이 아니라 그들 간의 연동에 대한 유형을 제시한다.                                 
  • 런타임에 따르기 어려운 복잡한 제어 흐름을 결정짓는데 사용할 수 있다.                                  
  • 객체의 인터커넥트(intercnnnect)에 초점을 맞춘 패턴



  • 분류

     

    생성 패턴(Creational Patterns)

    구조화 패턴(Structural Patterns)

    행위 패턴(Behavioral Patterns)

     분류 패턴
    (Partitioning Patte
    rns)
     기본 패턴(Fundamental Design Patterns)

    범위

    클래스

    Factory Method

    Adapter

    Interpreter

    Template Method

     Layered 
    Initialization
    Filter 
    Composite

     Delegation
    Interface
    Immutable
    Marker Interface

    Proxy

    객체

    Abstract Factory

    Builder

    Prototype

    Singleton

    Adapter

    Bridge

    Composite

    Decorator

    Façade

    Proxy

    Chain of Responsibility

    Command

    Iterator

    Mediator

    Memento

    Flyweight

    Observer

    State

    Strategy

    Visitor


    Design Pattern 관계도


    ※Design Pattern 이 다양화 할 수 있는 설계 측면

    목적

    디자인 패턴

    다양화할 수 있는 부분

    생성

    Abstract Factory

    제품 객체군

    Builder

    복합 객체 생성 방법

    Factory Method

    인스턴스화될 객체의 서브클래스

    Prototype

    인스턴스화될 객체 클래스

    Singleton

    클래스의 인스턴스가 하나인 경우

    구조

    Adapter

    객체에 대한 인터페이스

    Bridge

    객체 구현

    Composite

    객체의 합성과 구조

    Decorator

    서브 크랠싱 없이 객체의 책임성

    Façade

    서브시스템에 대한 인터페이스

    Flyweight

    객체의 저장 비용

    Proxy

    객체 접근 방법

    행위

    Chain of Responsibility

    요청을 처리하는 객체

    Command

    요청의 처리 시점과 처리 방법

    Interpreter

    언어의 문법과 해석 방법

    Iterator

    집합 객체의 요소들의 접근 방법 및 순회 방법

    Mediator

    어떤 객체들이 어떻게 상호작용하는지

    Memento

    언제 어떤 정보를 개체의 외부에 저장하는지

    Observer

    다른 객체에 종속적인 객체의수

    종속적인 객체들의 상태 변경 방법

    State

    객체의 상태

    Stratety

    알고리즘

    Template Method

    알고리즘의 단계

    Visitor

    클래스의 변경 없이 객체에 적용할 수 있는 오퍼레이션



     디자인 패턴과 친해지기

     하위 클래스에게 위임하기

     인스턴스만들기

     분리해서 생각하기

     동일시하기

     구조를 돌아다니기

     1. Iterator 패턴

     - 순서대로 지정해서 처리.


    2. Adapter 패턴 ( 상속 or 위임 )
     - 바꿔서 재이용

     3. Template Method

     - 하위 클래스에서 구체적으로 처리.


    4. Factory Method
     - 하위 클래스에서 인스턴스 만들기

     5. Singleton

     - 인스턴스를 한 개만 만들기


    6. Prototype
     - 복사해서 인스턴스 만들기


    7. Builder
     - 복잡한 인스턴스 조립하기


    8. Abstract Factory
     - 관련 부품을 조합해서 제품 만들기

     9. Bridge

     - 기능 계층과 구현 계층 분리하기


    10. Strategy
     - 알고리즘을 모두 바꾸기

     11. Composite

     - 그릇과 내용물을 동일시하기.


    12. Decorator
     - 장식과 내용물을 동일시하기.

     13. Visitor

     - 데이터 구조를 돌아다니면서 처리하기.


    14. Chain of Responsibility
     - 책임 떠넘기기

     단순화하기

     상태를 관리하기

     낭비 없애기

     클래스로 표현하기

     

     

     15. Facade

     - 단순한 창구


    16. Mediator
     - 중개인을 통해서 처리하기

     17. Observer

     - 상태의 변화를 알려주기


    18. Memento
     - 상태를 저장하기


    19. State
     - 상태를 클래스로 표현하기

     20 

    .Flyweight
     - 동일한 것을 공유해서 낭비 없애기


    21. Proxy
     - 필요해지면 만들기

     22. Command

     - 명령을 클래스로하기


    23. Interpreter
     - 문법규칙을 클래스로 표현하기.

     

     


    출처 : 

    http://warmz.tistory.com/763

    http://www.yunsobi.com/blog/141

    http://devx.tistory.com/entry/

    http://hyeonstorage.tistory.com/99

    http://tadis.tistory.com/

    http://crproj.tistory.com/75 - 구조및 개념 GOF

    '프로그래밍 > 디자인패턴' 카테고리의 다른 글

    Factory Method  (0) 2014.03.31
    추상 팩토리 (Abstract Factory) 패턴  (0) 2014.03.31
    Builder Pattern  (0) 2014.03.31
    GoF 의 디자인 패턴  (0) 2013.04.08
    디자인 패턴 간략 설명  (0) 2012.12.10