반응형 Design Patterns 💻 개발IT/Design Patterns 2022. 7. 20. 3. Behavior 패턴 - Chain-of-Responsibility Pattern Chain-of-Responsibility Pattern Object를 chain 방식으로 연결하고, request를 수행하지 못하는 Object라면 다음 Object (successor)에 넘기며 책임을 넘기는 형태의 패턴 목적 Receive Object를 함께 연결하여 두 개 이상의 Object에 request를 처리할 수 있는 기회 제공 사용하는 경우 여러 Obejct가 request를 처리할 수 있으며 특정 Object가 처리할 필요가 없는 경우 Object 집합은 런타임에 결정된 Handler로 request를 처리해야하는 경우 처리되지 않은 request도 가능한 경우 class diagram, sequence diagram Handler : request를 처리하기 위한 interface 정.. 💻 개발IT/Design Patterns 2022. 7. 20. 5. Structural 패턴 - Proxy Pattern Proxy Pattern object에 대한 접근을 제어할 수 있는 대리인 혹은 placeholder 사용하는 경우 object에 대한 접근 제어가 필요할 경우 object 접근할 때 추가 기능이 필요한 경우 class diagram 클라이언트가 DoAction() 메소드를 요청하면 Proxy가 대신 RealSubject의 DoAction() method를 호출하여 리턴값을 클라이언트에게 전달 Proxy : RealSubject에 접근할 수 있는 reference 유지 관리. Proxy가 RealSubject로 대체될 수 있도록 Subject와 동일한 인터페이스 제공. RealSubject에 대한 접근을 제어하고 생성 삭제 담당 Subject : Proxy 및 RealSubject의 공통 인터페이스를 정.. 💻 개발IT/Design Patterns 2022. 7. 19. 4. Creational 패턴 - Prototype Pattern Prototype Pattern 목적 복제를 통해 기존 Object의 템플릿을 기반으로 Object 생성 사용하는 경우 Object의 구성, 생성 및 표현은 시스템과 분리되어야 하는 경우 생성할 클래스는 런타임에 지정될 경우 다른 object와 object 집합과 동일하거나 유사한 것이 필요할 경우 (각 object의 초기 생성 비용은 큼) class diagram Prototype : 복제를 위한 interface 정의 ConcreteProduct : 자신을 복제할 수 있는 Object Client : 복제 request class diagram (shallow, deep) sequence diagram 특징 Prototype을 공급하고 런타임에 변경(추가, 제거)할 수 있음 -> 런타임에 큰 유연성 .. 💻 개발IT/Design Patterns 2022. 7. 19. 5. Structural 패턴 - Facade Pattern Facade Pattern 서브시스템의 인터페이스 집합에 대한 통합 인터페이스 제공하여 서브시스템을 더 쉽게 사용할 수 있도록 함 기능 추가 없이 오로지 통합 인터페이스 제공 목적 인터페이스 집합에 단일 인터페이스 제공 사용하는 이유 복잡한 시스템에 대한 접근을 위해 간단한 인터페이스 필요 시스템 구현과 클라이언트 사이에 많은 종속성 존재 시스템와 서브시스템은 계층화되어야 장점 서브 시스템의 구현을 클라이언트에게 숨김 서브 시스템을 더욱 쉽게 사용할 수 있도록 함 서브 시스템과 클라이언트 간의 약한 결합도 클라이언트에 영향을 주지 않고 서브시스템 내 클래스 변경 가능 vs. Adapter Pattern Facade는 기존 시스템을 편하게 쓰기 위해서, Adapter는 기존 시스템을 다른 것처럼 사용하기 .. 💻 개발IT/Design Patterns 2022. 7. 19. 3. Behavior 패턴 - Command Pattern Command Pattern 특정 Command를 Object화하여 객체를 필요에 따라 처리하는 패턴 목적 request를 Object로 캡슐화 queuing 및 콜백 같은 기존 Object 기반 관계에서 request 처리 사용하는 경우 request는 다양한 시간대, 순서로 실행될 경우 request의 history가 필요한 경우 호출하는 Object와 호출 받는 Object를 분리해야할 경우 Command Pattern을 사용하지 않을 경우 아래 처럼 버튼의 행동을 수정하기 위해 Client code를 수정해야하는 문제점 존재 Class 다이어그램 Client : command object를 생성 Invoker : Client 요청을 받아 Receiver의 액션을 호출 Receiver : Concr.. 💻 개발IT/Design Patterns 2022. 3. 12. 6. Compound 패턴 - MVC Pattern Compound Pattern 여러 다른 디자인 패턴들이 결합된 패턴 MVC Pattern (Model-View-Controller Pattern) Compound Pattern으로 대표적으로 Strategy, Observer, Composite pattern 등이 결합된다. Strategy Pattern View는 자기에게 들어온 request를 Controller에게 위임한다. Observer Pattern Model은 View, Controller를 직접 알지 않지만 Model은 Observer Pattern처럼 Notification을 해준다. (왜냐하면 UI Layer는 자주 변하는데 Non-UI Layer가 UI Layer를 알고 있다면(그 반대는 Non-UI Layer가 자주 변경하지 않기 .. 💻 개발IT/Design Patterns 2022. 3. 10. 5. Structural 패턴 - Bridge Pattern 문제 정의 간단하게 그림을 그릴 수 있는 프로그램을 만들고자 한다. 처음에는 사각형을 그리는 라이브러리가 두 종류(함수 DP1, DP2)가 존재한다. 처음에는 두 라이브러리 밖에 없지만 추가될 수 있으므로 변하지 않는 Rectangle을 만들고(client가 접근하는 부분) 변하는 부분(V1, V2...)을 concrete class로 구현하여 encapsulate한다. drawline이 어떤 라이브러리로 사용할 지 rectangle class level에서 결정하지 못해서 abstract 함수로 구현하여 하위 class에서 Implementation할 수 있도록 한다. 여기서 사각형 뿐만 아니라 다양한 모양(ex. 원)을 그리는 방법을 추가하고자 한다. 모든 모양을 포용하고 나타낼 수 있는 class가.. 💻 개발IT/Design Patterns 2022. 3. 9. 5. Structural 패턴 - Composite Pattern 문제 정의 메뉴와 메뉴아이템은 아래와 같은 tree형식으로 표현할 수 있다. 보통은 분기문으로 instance of(type) 하여 확인할 수 있으나 Composite Pattern에서는 이를 손쉽게 해결할 수 있다. 해결 방법 메뉴아이템과 메뉴는 모두 하나의 Component를 상속하고 있다. (MenuComponent는 Item, Menu 모두 커버할 수 있다) 단지 동일한 interface를 제공하기 위한 class여서 모든 operation을 exception이 나도록 처리한다. Composite Pattern Transparency (Child 관련 함수가 Component에 존재) tree구조의 object 계층을 표현하고 이들을 동일한 Interface로 나타내는 패턴 Iterator Men.. 💻 개발IT/Design Patterns 2022. 3. 6. 5. Structural 패턴 - Adapter Pattern Adapter Pattern (:= Wrapper) 공통 object를 생성하여 서로 다른 interface를 가진 class가 상호작용할 수 있도록 하는 패턴 Object Adapter object composition과 delegation 사용 Class Adapter 상속 사용 예제 1 사용자가 Turkey를 Duck인 것처럼 사용하고 싶어 TurkeyAdapter 생성한다. 예제 2 Enumeration을 Iterator처럼 사용하기 위해서 Adapter 패턴을 이용한다. 이전 1 2 3 다음 반응형