본문 바로가기

소프트웨어공학/디자인 패턴19

Command Pattern 커맨드(명령) 패턴 - 행동, 메소드 호출의 캡슐화 | [Design pattern] 디자인 패턴 Command Pattern 메소드 호출을 캡슐화(encapsulation) 한다. 여러 기능을 실행할 수 있도록 재사용성이 높은 클래스를 설계하는 패턴 서비스를 호출할 때 융통성을 높이려고 사용 매개 변수를 사용하여 여러가지 다른 요구사항을 처리 문제점) GUI toolkit GUI 컴포넌트(버튼, 텍스트필드) 들이 Client 가 설정한 임의의 작업을 수행하도록 하려면 어떻게 해야할까 Universal remote controller 각 버튼이 임의의 가전제품을 제어하게 하려면 어떻게 해야 할까 Unknown consumer electronic devices 객체간 상호작용 Receiver : 서비스 제공자 Invoker : Client의 일부가 될 수 있다. invoker 와 receiver 사이에.. 2021. 12. 31.
MVC 패턴 , Model - View - Controller | [Design pattern] 디자인 패턴 MVC Pattern 사용자 인터페이스를 구현하기 위한 구조 패턴 Model로 부터 UI를 분리 동시 개발 가능, Loose coupling, 용이한 변경 high cohesion: grouping related actions on A controller, grouping views for A model. 구성요소) Model : 어플리케이션 객체 View : 모델을 스크린에 표현 갱신된 model의 상태를 즉각 반영 one model multiple different views composite view Controller : 입력에 따라 반응 방식 바꿈 1. View --> Controller : 유저 행동 2. Controller --> Model : 상태 변경 3. Controller --> Vi.. 2021. 12. 29.
Abstract Factory Pattern - 생성, 팩토리 추상화와 제품군 생성 추상화 | 추상 팩토리 패턴 [Design pattern] 디자인 패턴 Abstract Factory 다양한 구성 요소 별로 객체의 집합 생성 같은 종류의 여러 개의 객체를 생성할 수 있는 클래스를 생성 생성 군들을 하나에 모아놓고 팩토리(Factory) 중에서 선택하게 하는 패턴 관련있는 서브 클래스를 묶어서 팩토리 클래스를 만들고, 이들 조건에 따라 객체를 생성하는 패턴 여러 개의 클래스를 하나의 추상 클래스로 묶어 한번에 교체할 수 있는 패턴 ex) 제품군 (A family of products) GUI widgets : window, scroll bar, button, text field .. Pizza ingredients : dough, sauce, cheese ... - 제품, 운영체제, 회사별로 유사한 제품이지만 지원하는 기능에 차이가 있을 경우, 기능별로 통.. 2021. 12. 26.
Factory Method Pattern 팩토리 메소드 패턴 - 생성, 다양한 유형의 객체 생성, 변경, 추가가 빈번히 일어나는 경우 | [Design pattern] 디자인 패턴 Factory Method 패턴 서브 클래스가 인스턴스를 결정하도록 하고 책임을 위임하는 패턴 객체의 생성을 서브 클래스에 위임하는 패턴 조건에 맞게 객체를 다르게 생성 결합도 줄이고 유지보수 용이 템플릿 메소드 패턴 사용 (Virtual - Constructor) 객체 생성 방법) 생성자 (new 연산자)를 사용하여 직접 생성 객체 생성 클래스 / 메소드 (factory class / method) 사용 -> 객체 생성을 추상화 문제점1) 다양한 종류의 피자 (객체)를 생성 변경 추가 제거 가능 생성자를 사용하여 객체 생성 Pizza orderPizza(String type) { Pizza pizza; if (type.equals(“cheese”)) { pizza = new CheesePizza(); .. 2021. 12. 21.
State Pattern 상태 패턴 - 행위, 내부 상태를 가져서 특정 상태에서의 행동들을 하나의 class에 캡슐화 | Design pattern 디자인 패턴 State pattern The State Pattern allows an object to alter its behavior when its internal state changes. The object will appear to change its class. 규칙에 따라 객체의 상태를 변화시키면서 객체가 할 수 있는 행위를 바꾸는 패턴 특정 메소드가 객체의 상태에 따라 다른 기능을 수행 객체의 상태에 따라 동일한 루틴에서 다른 행동을 할 수 있다. 용어 내부 상태 프로그램의 실행 과정에서 현재 유지하고 있는 변수 및 실행 상황. 내부 상태를 가지는 머신 자판기, 엘레배이터, ATM 기기 내부 상태를 가지는 머신은 현재 상태에 따라 같은 행동(사건) 이 다른 결과를 낳을 수 있다. ex) 자판기내 음.. 2021. 12. 16.
Decorator Pattern - 구조, 구성과 위임을 통해 특정 개체에 행동을 동적으로 추가 | [Design pattern] 디자인 패턴 Decorator Pattern 같은 class의 다른 객체들에는 영향을 주지 않고, 구성과 위임을 통해 특정 객체에 행동을 동적으로 추가 소스를 변경하지 않고 기능을 확장 기존 객체의 메소드에 새로운 행동을 추가하거나 오버라이딩 가능 객체에 독립적인 기능을 계속해서 추가, 확장할 때 유용 객체에 부가적인 기능을 동적으로 추가할 때 사용 문제점) 상속을 사용한 객체의 기능 확장은 subclass를 양산한다. Subclassing을 사용한 정적 확장의 문제점: ① 너무 많은 subclass가 필요함 ② 새로운 유형의 음료수가 개발될 때마다 subclass를 계속 추가되어야 함. 패턴 아이디어) DataInputStream dis; // primitive value dis = new DataInputStre.. 2021. 12. 11.
Proxy Pattern 프록시 패턴 - 구조, Heavy object를 대리할 light object를 생성 | Design pattern 디자인 패턴 Proxy Pattern 프록시 패턴은 surrogate 와 다른 객체의 접근에 대한 통제를 할 수 있는 placeholder를 제공한다. 객체의 대리자를 이용하여 다른 객체로의 접근을 통제하는 패턴 대리 객체를 통해 원래 객체의 작업을 대신 수행 복잡한 작업과 단순한 작업을 나누어서 처리 원래의 기능을 수행하면서 부가적인 기능을 수행할 때 유용 문제점) 객체 생성에 비용(시간, 자원)이 많이 드는 Heavy object 가 있다. 프로그램이 종료될 때까지 한 번도 사용되지 않으면 시간, 자원의 낭비가 있다. Key Idea) Heavy object를 대리할 light object를 생성 - Heavy object와 동일한 인터페이스를 가지는 proxy (대리 객체) Heavy object 대신 prox.. 2021. 12. 4.
Template Method Pattern 템플릿 패턴 - 행동, 메소드 내에 알고리즘 골격을 정의한다. | Design Pattern 디자인 패턴 Template Method Pattern 작업의 일부분을 캡슐화하여 전체 일을 수행하는 구조는 그대로 유지하면서 특정 부분을 바꾸는 패턴 메소드내에 알고리즘 골격을 정의한다. variant step의 구현을 subclass들에게 미룬다.(defer) 하위 클래스는 알고리즘 구조를 변경하지 않는다. variant step을 자신의 방법으로 구현한다. The AbstarctClass 는 템플릿 메소드를 포함한다. templateMethod() templateMethod() 에서 primitiveOperation 들이 사용된다. concrete invariant operations abstract variant operations hook (default or null operation) primitiveO.. 2021. 11. 27.
Observer Pattern 옵저버 패턴 code , java built-in package | Design pattern 디자인 패턴 Java에는 기본 지원 기능이 있습니다. 여러 API에 포함되어 있다. 일반적으로 java.until package에 The Observer interface and The Observable class 가 있다. Subject and Observer interface 와 비슷하다. The Observable class keeps track of all yours observers and notifies them for you This should look familiar. In fact, it's exactly the same as our previous class diagram. How Java’s built-in Observer Pattern works For an Object to become a.. 2021. 11. 20.
Observer Pattern 옵저버 패턴 - 행동, 구독자(observers)와 주제(subject) | Design pattern 디자인 패턴 Observer Pattern Observer pattern allows a number of observer objects to synchronize its state with the subject's state. Observers(구독자, 가입자, 관찰자) 에게 특정 주제(subject)를 Push 하여 전달하거나 Pull 해서 Observer 를 필요시 주제를 가져온다. 옵저버 패턴을 트위터에 비유하여 표현한 사진을 보니 쉽게 이해가 되는 것 같다. 2개의 객체가 loosely coupled 되어있을때 , 두 객체는 상호작용한다. but 그것들은 서로를 모른다. 옵저버 패턴은 subject와 loosely coupled 된 옵저버들의 객체 설계 제공한다. 왜 그럴까? 오직 한 주제가 특정 인터페이스.. 2021. 11. 9.
Strategy Pattern ㅡ 행위, 행동(Behavior)을 인터페이스로 추상화 시켜 구성(composition)을 통해 행동들을 사용 | Design Pattern 디자인 패턴 Strategy Pattern 클래스별로 캡슐화되어 있는 객체들을 교체할 수 있도록 함으로써 같은 작업을 다른 알고리즘으로 사용할 수 있도록 하는 패턴 Strategy 클래스 내 각각 캡슐화 그리고 구성을 통해 알고리즘 바꿀 수 있다. Strategy Pattern 은 클라이언트가 독립적으로 다양한 알고리즘을 사용한다. 다형성을 이용하여 특정 객체에 종속되지 않도록 한다. 다른 부분을 분리하여 캡슐화한다. 상속하지 않는 대신 인터페이스를 통해 캡슐화(추상화)한다. (상속 대신 구성 사용) 분리된 strategies 인터페이스에서 behaviors(행동)이 정의된다. behavior 과 behavior을 사용하는 class 사이에는 더 나은 decoupling 이다. Behaviors 는 런타임시에도 변경.. 2021. 11. 4.
Composite Pattern Example code, Designing Menus with Composite .java | Design Pattern디자인 패턴 Designing Menus with Composite Waitress Waitress는 MenuComponent 인터페이스/추상 클래스 를 통해 Menu 와 Menuitems에 access 한다. MenuComponent Menu 와 MenuItem 의 interface를 나타낸다. abstract class 를 통해 클래스 내에 원하는 기본 메소드 구현 제공 공통연산과 Menu 조작 연산으로 구성 공통연산 : getName, getDescription, getPrice, print 조작연산 : add, remove, getChild MenuItem Both Menu and Menus override print() Menu we’ll use the getName() andngetDescription().. 2021. 10. 27.