ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Intro.디자인 패턴 정리 ( Design pattern )
    JAVA/Design pattern 2017. 8. 17. 10:13
    반응형

    디자인 패턴의 정의

     
    -프로그래머들이 유용하다가 생각되는 객체들간의 일반적인 상호작용 방법들을 모은 목록
    -어떤 분야에서 계속 반복해서 나타나는 문제들을 해결해 온 전문가들의 경험을 모아서 정리한 것
    -여러 번 반복하여 사용할 수 있는 문제에 대한 솔루션을 기술한 것(Gamma)


    디자인 패턴의 역사
     
    -디자인 패턴의 연구는 1990년대 초반 Erich Gamma[1992]에 의해 시작
    -일반적으로 GoF(Gang of Four)의 분류가 많이 활용되고 있음.
    -23개의 일반적이고 유용한 패턴들을 제공
    -패턴을 사용하게 되면 이미 검증된 해결방안을 계속 재사용할 수 있음.


    패턴의 구성요소(GoF)
     
    -패턴의 이름과 구분: 패턴을 부를 때 사용하는 이름과 패턴의 유형
    -문제 및 배경: 패턴이 사용되는 분야 또는 배경, 해결하는 문제를 의미
    -솔루션: 패턴을 이루는 요소들, 관계, 협동(Collaboration) 과정
    -사례: 간단한 적용 사례
    -결과: 패턴을 사용하면 얻게 되는 이점이나 영향
    -샘플 코드: 패턴이 적용된 원시코드


    디자인 패턴의 종류


    생성 패턴

     
    -Factory Method: 입력 데이터에 따라 Abstract한 부모 클래스의 여러 서브클래스 중 어떤 것을 반환할지를 결정하는 간단한 클래스 제공
    -Abstract Factory: 관련된 객체들의 Family중 하나를 생성하고 반환하는 인터페이스 제공
    -Builder: 복잡한 객체의 생성을 표현과 분, 프로그램의 필요에 따라 여러 다른 표현 생성
    -Prototype: 새로운 인스턴스를 복사하거나 복제하는 인스턴스화된 클래스를 제공, 인스턴스는 Public 메소드 사용하여 테일러링 가능
    -Singleton: 하나 이상의 인스턴스가 생성되지 않는 클래스를 의미, 이러한 인스턴스에 접근하기 위한 하나의 Global 접근 포인트 제공
     

    구조 패턴

     
    -Adapter: 하나의 클래스 인터페이스가 다른 클래스들과 합쳐지는 데 이용
    -Bridge: 객체의 구현과 인터페이스 분리시 서로 영향을 미치지 않으면서 변화시키려고 할 때 사용
    -Composite: 객체를 새로 만들고 각각의 객체는 단순 한 개의 객체이거나 Composition된 객체
    -Decorator: 동적으로 객체에 신뢰성을 추가할 때 사용
    -Facade: 하나의 클래스로 모든 서브시스템을 컨트롤 하고자 할 때 사용
    -Flyweight: 객체 공유를 위해서 각 인스턴스는 그 자신의 상태를 내부에 저장하지 않고 외부에 저장. 클래스의 인스턴스들이 메모리에 많이 존재할 경우 메모리 공간을 절약하여 효율적으로 사용
    -Proxy: 복잡한 객체의 루틴을 대신 호출해주는 간단한 객체 제공


    행위 패턴

    -Command: SW 명령 실행을 표현하는 간단한 객체 구성, 로그 작성, Undo가 가능한 명령 작성
    -Chain of Responsibility: 요청이 인식될 때까지 체인을 따라 요청한 객체에서 다음 객체로 전달, 객체들간 커플링 최소화
    -Mediator: 모든 객체의 레퍼런스를 간직하고 있는 별도의 클래스, 이를 통해 하나로부터 여러 개로 통신 정의
    -Interpreter: 프로그램에 어떻게 자체 언어를 내장할 것인가에 대한 정의 제공
    -Iterator: 클래스 사이에 데이터 리스트를 전달하는 방법 정의
    -Observer: 여러 개의 객체들의 변화 감지 방법 정의
    -State: 객체의 내부 상태가 변화되었을 때 각자의 행동을 변화시키는 방법 정의
    -Strategy: 클래스내부의 알고리즘 캡슐화
    -Template: 알고리즘의 추상 정의 제공
    -Visitor: 클래스를 침해하지 않고 폴리모피즘 더함


    중요한 세가지 규칙
    -구현(Implementation)클래스가 아니라, 인터페이스(Interface)를 가지고 프로그래밍
    • 인터페이스 클래스의 메소드를 바탕으로 호출
    • 인터페이스를 구현한 클래스의 내부 변화(비즈니스 로직 변경)에 영향을 받지 않음
    -상속(Inheritance)이 아니라 위임(Delegation)을 사용
    • 불필요한 수퍼클래스의 속성 및 메소드를 상속받음
    • 상속의 경우 컴파일시 수퍼클래스와 서브클래스의 구조가 결정됨
    • 위임의 경우 런타임시 필요한 클래스를 사용
    -커플링(Coupling) 최소화

    • God Class를 만들지 않음
    • 한 클래스의 변화가 전체클래스를 변화되지 않게 해야 함


    이제부터 써내려갈 디자인 패턴은 이분의 블로그를 많이 활용하여 정리 할 것입니다.


    반응형

    'JAVA > Design pattern' 카테고리의 다른 글

    01. Singleton Pattern(싱글톤 패턴 기본) [JAVA]  (0) 2017.06.09

    댓글

Designed by Tistory.