ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Design Pattern - Structural Pattern
    IT Fundamental Concept/Design Pattern 2022. 3. 2. 20:24

    프로그램의 Organization에 관심을 갖습니다.
    확실한 구조적 목적을 달성할 수 있도록 클래스를 Organize 합니다.
    동적 모델을 변경하지 않고도 프로그램을 변경할 수 있습니다.

    다른 객체에 대한 우회(Indirection)를 제공합니다.

    • Adapter
    • Bridge
    • Proxy

    다른 클래스의 인터페이스를 Wrapping 합니다.

    • Facade
    • Adapter

    재귀를 구성합니다.

    • Decorator
    • Composite

    1. Adaptor

    호환되지 않는 인터페이스를 어뎁터를 통해 변환하여 함께 동작될 수 있도록 합니다. Client와 구현된 Adaptor가 Decouple되어 Adaptor가 변경되거나 추가되어도 Client는 수정할 필요가 없습니다.

    2. Bridge

    https://lktprogrammer.tistory.com/35

    가운데 Bridge가 있고 좌측에는 Absract Class가 범용적인 설계를 넣고, 우측에는 제공되는 기능에 대한 Imlementaition Specific한 설계가 존재 합니다. 두 계층을 분리함으로써 독립적인 확장이 용이하며, 서로 변경이 되어도 Client에는 영향이 없게 됩니다.

    Bridge vs Adaptor

    Adaptor 패턴은 시스템의 설계가 완료된 후, 특정 요구 사항때문에 어댑터 패턴을 적용하는 반면에 Bridge 패턴은 설계 진행 중에 의도적으로 적용시켜 두 레이어로 분리시키는 것입니다.

    3. Proxy

    실제 기능을 수행하는 Real Object 대신 가상의 객체 Proxy Object를 사용해 로직의 흐름을 제어하는 디자인 패턴 입니다. 요구되는 객체가 외부에 있어 직접 접근이 어려울 때, 객체에 대한 접근 제어 및 추가적인 역할을 부여할 때 사용될 수 있습니다. Caller와 Callee 간 의존성을 Decouple 시켜 직접적인 의존성을 제거해 줍니다.

    Proxy vs Adaptor

    Adaptor 패턴은 두 클래스 간 인터페이스 불일치 문제를 해결해주는 목적을 가지는 반면 Proxy 패턴은 두 객체 사이에 Proxy 객체를 두어 두 객체 사이를 Decouple 시키는 것이 목적 입니다.

    4. Facade

    시스템이 제공하는 범용적인 서브 시스템들을 Encapsulation 하고, 복잡한 서비스들을 통합한 Interface를 Expose하여, Client가 시스템 내부에 직접적으로 복잡하게 의존하지 않도록 Decouple 시킵니다. 고수준 인터페이스를 정의하기 때문에 서브 시스템을 더 쉽게 사용할 수 있습니다.

    Facade vs Adaptor

    이미 존재하는 서브 클래스들이 있을 때 사용이 됩니다. Facade는 이미 존재하는 Interface를 단순하게 변경하는 반면, Adaptor는 바꾸고자 하는 Target Interface에 맞춰야 하며, 오래된 Interface를 재사용하게 됩니다.

    Facade vs Mediator

    두 패턴 모두 외부에 하나의 인터페이스를 제공하여 내부 시스템을 활용하게 됩니다. Facade는 Structural Pattern으로 서브 시스템에 Masseage를 Delegate만 해주지만 Mediator는 Behavioral 패턴으로 College간의 Workflow를 관장해 줍니다. Facade는 Workflow가 Open되어 있으나 Mediator는 Close 되어 있다.

    5. Decorator

    Runtime에 개별 객체에 새로운 Behavior를 동적으로 추가할 수 있게 됩니다. 개별 객체 종류 및 Behavior의 종류 확장이 용이 합니다.

    6. Composite

    객체들을 트리 구조로 구성하여 부분과 전체를 나타내는 계층 구조로 표현할 수 있습니다. 클리이언트에서 개밸 객체와 다른 객체들로 구성된 복합 객체(Composite)를 똑같은 방법으로 다룰 수 있습니다.

    Composite vs Decorator

    두 패턴 모두 Reculsive한 Composition 패러다임을 추구합니다. Decorator는 Sub Classing 없이 객체에 책임을 부여하고 원할 때 마다 만들어지 기능을 사용하게 됩니다. Composite은 관련된 객체들을 구조적으로 다룰 수 있고, 여러 객체들을 하나처럼 다룰 수 있습니다.

    7. Flyweight

    어떤 클래스의 인스턴스 한개만 가지고 여러 개의 "가상 인스턴스"를 제공해야 할 때 사용합니다. 실행시에 객체 인스턴스의 개수를 줄여서 메모리를 절약할 수 있습니다. 

    'IT Fundamental Concept > Design Pattern' 카테고리의 다른 글

    Design Pattern - Creational Pattern  (0) 2022.03.14
    Design Pattern - Behavioral Pattern  (0) 2022.03.02
Designed by Tistory.