문제 및 이론 정리/디자인패턴 14

[디자인패턴] Adapter - 사이에 끼워 재사용한다

'이미 제공된 것'과 '필요한 것' 사이에 들어가서 그 사이를 채우는 것이 어댑터의 역할adapter - 적응시키는 것, wrapper 패턴이라고도 불림프로그램의 세계에서도 이미 제공된 코드를 그대로 사용할 수 없을 때 필요한 형태로 변환한 후 이용한다클래스에 의한 Adapter 패턴 (상속을 사용한 패턴)인스턴스에 의한 Adapter 패턴 (위임을 사용한 패턴)1. Banner 클래스를 상속받아 필요한 Print 인터페이스를 구현public class Banner { private String string; public Banner(String string) { this.string = string; } public void showWithParen() { ..

[디자인패턴] Observer - 상태 변화를 알려준다

관찰 대상의 상태가 변화하면 관찰자에게 알린다상태 변화에 따른 처리를 기술할 때 효과적observer, 능동적인 '관찰자'의 의미와는 달리 Subject 역에서 알려주는 것을 수동적으로 기다린다 (Publish-Subscribe)view-model (MVC) Subject 관찰되는 대상, 관찰자인 Observer를 등록/삭제하는 메서드, 현재 상태 가져오는 메서드 선언, NumberGenerator 클래스ConcreteSubject 구체적인 '관찰되는 대상', 상태가 변경되면 등록된 Observer에 알린다, RandomNumberGenerator Observer, Subject로부터 상태가 변했다고 전달받는다, 전달받기 위한 메서드는 여기서 update, Observer 인터페이스ConcreteSubj..

[디자인패턴] Builder - 복잡한 인스턴스를 조립한다

build: 일반적으로 구조를 갖춘 큰 구조물을 건축하거나 구축하는 것을 말한다.Builder 패턴은 구조를 가진 인스턴스를 구축해 가는 패턴을 말한다.  Builder 추상클래스, 인스턴스를 생성하기 위한 인터페이스(API)를 결정, 인스턴스의 각 부분을 만드는 메서드가 준비ConcreteBuilder Builder의 인터페이스(API)를 구현하는 클래스, 실제 인스턴스 생성으로 호출되는 메서드가 여기에 정의Director Builder의 인터페이스(API)를 사용하여 인스턴스를 생성한다, ConcreteBuilder 역에 의존하는 프로그래밍을 하지 않고 어떤 ConcreteBuilder 역이든 잘 작동하도록 Builder의 메서드만 사용한다.Client  public abstract class Bui..

[디자인패턴] Facade - 단순한 창구를 만든다

facade 건물의 정면(앞면), 창구 복잡하게 얽혀서 너저분한 세부 내용을 정리하여 높은 수준의 인터페이스(API)를 제공한다facade 역은 시스템 외부에 간단한 인터페이스(API)를 보여준다시스템 내부의 각 클래스의 역할과 의존 관계를 고려하여 올바른 순서로 클래스를 사용한다  Facade - 시스템을 구성하는 그 밖의 많은 역을 위한 단순한 창구, 높은 수준의 단순한 인터페이스(API)를 시스템 외부에 제공시스템을 구성하는 그 밖의 많은 배역 - 각자의 일을 하고 Facade에 대해 신경 쓰지 않음, Facade로부터 호출을 받고 일하지만 수많은 다른 배역에서 Facade를 호출하는 경우는 없음Client - Facade 패턴을 이용, Main 클래스 복잡한 것을 단순하게 보여준다. Facade ..

[디자인패턴] Factory Method - 하위 클래스에서 인스턴스를 만든다

책 [JAVA 언어로 배우는 디자인 패턴 입문 3판;유키 히로시 저]을 참고하여 작성하였습니다. 인스턴스를 생성하는 공장(factory)을 Template Method 패턴으로 구성한 것인스턴스 생성 방법을 상위 클래스에서 결정하되, 구체적인 클래스 이름까지 결정하지 않는다.구체적인 것은 모두 하위 클래스에서 붙임으로써 인스턴스 생성을 위한 뼈대(프레임워크)와 실제 인스턴스를 생성하는 클래스를 나누어 생각한다.상위 클래스하위 클래스추상적인 뼈대, 프레임워크실제 구현부 Product 프레임워크, 이 패턴으로 생성되는 인스턴스가 가져야 할 인터페이스(API)를 결정하는 추상 클래스Creator 프레임워크, Product 역을 생성하는 추상 클래스, Creator 역은 실제로 생성할 ConcreteProduc..

[디자인패턴] State - 상태를 클래스로 표현한다

책 [JAVA 언어로 배우는 디자인 패턴 입문 3판;유키 히로시 저]을 참고하여 작성하였습니다.  상태를 클래스로 표현한다.클래스를 전환함으로써 상태 변화를 나타낸다. State 상태마다 다르게 동작하는 인터페이스(API) 정의, 상태에 의존한 동작을 하는 메서드 모음ConcreteState State 인터페이스를 구현한 구체 클래스, 상태 클래스 ex. 주간 클래스, 야간 클래스Context 현재 상태를 나타내는 ConcreteState를 필드로 둔다, 이 필드에 상태 클래스의 인스턴스를 대입함으로써 상태를 전환한다   1. State 패턴을 사용하지 않는 코드 예시경비 시스템 클래스 { 금고 사용 시 호출되는 메소드() { if(주간) { ... } else i..

[디자인패턴] Composite - 그릇과 내용물을 동일시한다

책 [JAVA 언어로 배우는 디자인 패턴 입문 3판;유키 히로시 저]을 참고하여 작성하였습니다.  그릇과 내용물을 동일시하여 재귀적인 구조를 형성디렉토리(그릇), 파일(내용물)을 디렉토리 엔트리라는이름으로 같은 종류로 동일시  Leaf 내용물, 이 안에 다른 것을 넣을 수 없다, File 클래스Composite 그릇, Leaf와 Composite을 넣을 수 있다, Directory 클래스Component Leaf와 Composite을 동일시하기 위한 역할, 공통되는 상위 추상 클래스, EntryMain  Directory클래스public class Directory extends Entry { // Entry는 File과 Directory의 공통 추상 클래스 private String name; ..

[디자인패턴] Proxy - 필요해지면 만든다

책 [JAVA 언어로 배우는 디자인 패턴 입문 3판;유키 히로시 저]을 참고하여 작성하였습니다.  본인 객체를 대신해서 대리인 객체가 일을 대신 처리대신 대리인 객체가 할 수 없는 일일 때 본인 객체를 생성→ 초기화에 시간이 오래 걸리는 시스템이라면 대리인을 사용하여 작업 처리 속도를 올릴 수 있다, 유지보수 용이 Subject 본인, Proxy와 RealSubject를 동일시하기 위한 인터페이스(API), 공통 인터페이스 Proxy 대리인, Subject 인터페이스 구현- client 요청을 최대한 처리하는데 자기 혼자 처리할 수 없다면 RealSubject에게 맡긴다. - 이때서야 RealSubject 인스턴스를 생성한다. RealSubject 실제 본인, Subject 인터페이스 구현- Proxy만..

[디자인패턴] Decorator - 장식틀과 내용물을 동일시한다

책 [JAVA 언어로 배우는 디자인 패턴 입문 3판;유키 히로시 저]을 참고하여 작성하였습니다.  객체에 장식이 되는 기능들을 하나씩 추가장식틀과 내용물을 동일시한다내용물을 변경하지 않고 기능을 추가→ 투과적인 인터페이스(API)를 유지한 채 객체를 차례로 씌워 기능을 추가한다 Component 기능을 추가할 때 핵심이 되는 역할 DisplayConcreteComponent Component를 구현하는 구체 클래스Decorator 새로운 기능(장식) Component를 가지고 있음ConcreteDecorator Decorator클래스를 구현하는 구체 클래스 더보기더보기Display 문자열 표시용 추상 클래스StringDisplay Display를 상속하는 구체 클래스, 핵심 문자열Border 장식틀 추상..

[디자인패턴] Visitor - 데이터 구조를 돌아다니면서 처리한다

책 [JAVA 언어로 배우는 디자인 패턴 입문 3판;유키 히로시 저]을 참고하여 작성하였습니다.  데이터 구조의 각 요소에 대해 처리를 한다.많은 요소가 모여 있는 내부를 돌아다니며 같은 처리를 반복해서 적용한다.데이터 구조와 처리를 분리한다.- 부품으로서의 독립성을 높여준다, OCP 설계 원칙의 적용 Visitor 추상클래스, visit(***) 선언 ConcreteVisitor 클래스, visit(***) 메서드 구현Element 데이터 구조 나타내는 인터페이스, 방문자를 받아들이는 accept 메서드 선언ConcreteElement 구체 클래스, File, Directory, accept 메서드 구현ObjectStructure Element 집합, Directory 클래스는 각각의 Element를 ..