문제 및 이론 정리 25

[디자인패턴] 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를 ..

[디자인패턴] Iterator - 처리를 반복한다

책 [JAVA 언어로 배우는 디자인 패턴 입문 3판;유키 히로시 저]을 참고하여 작성하였습니다.  Iterable 집합체 인터페이스Iterator 처리를 반복하는 반복자 인터페이스BookShelf implements Iterable집합체 구현 클래스BookShelfIterator implements Iterator 반복자 구현 클래스 Book 각 요소 나타내는 클래스  Iterable 인터페이스는 처리를 반복할 대상으로 이 인터페이스를 구현하는 클래스는 배열처럼 '뭔가 많이 모여있는 것' 이른바 '집합체'가 된다. Iterable 인터페이스는 iterator 메서드가 선언되어 있다.public interface Iterable { public abstract Iterator iterator();} ..

[디자인패턴] Bridge - 기능 계층과 구현 계층을 분리한다

책 [JAVA 언어로 배우는 디자인 패턴 입문 3판;유키 히로시 저]을 참고하여 작성하였습니다.  (기능의 클래스 계층) == Bridge == (구현의 클래스 계층)기능의 클래스 계층과 구현의 클래스 계층을 연결(분리)한다두 개의 독립된 클래스 계층을 Bridge로 연결상속은 강한 결합, 위임은 약한 결합 /  필요에 따라 클래스 간의 관계를 전환하고자 할 때 위임 사용 기능의 클래스 계층- 새로운 기능을 추가할 때 자신의 목적과 가까운 클래스를 찾아 하위 클래스를 만들고 거기에 새로운 기능 추가한다SomethingㄴSomethingGood ㄴSomethingBetter  구현의 클래스 계층- 상위 클래스는 추상 메서드로 인터페이스(API)를 규정한다- 하위 클래스는 구상 메서드로 그 인터페이스를 구현..

[디자인패턴] Strategy - 스위치를 전환하듯 알고리즘을 바꾼다

책 [JAVA 언어로 배우는 디자인 패턴 입문 3판;유키 히로시 저]을 참고하여 작성하였습니다. 1. Strategy 인터페이스(API)2. 구체 전략 클래스3. Strategy를 사용하는 곳 (Player) Player에서 어떤 Strategy 전략 클래스를 이용해 게임을 한다고 가정한다.  Player와 같이 Strategy를 사용하는 곳에서 구체 클래스가 아니라 인터페이스를 이용해 코드를 짜면 Strategy에 뭐가 들어오든지 간에 '어떤' 전략을 사용할 수 있는 것이다. (Player는 넓은 시야에서 프로그램을 어떻게 전개시킬지 정한다.) 다시 말해 Main 클래스에서 new Player(new RandomStrategy())와 같이 Playe 객체를 생성할 때 매개변수로 내가 Strategy 인..