1. Observer Pattern
ⓐ Name : Observer
ⓑ Description
- 본 패턴은 객체 사이에 일 대 다의 종속성을 정의하고 한 객체의 상태가 변하면 종속된 객체에게 통보가 가서 자동으로
업데이트가 일어나게 하는 것이 목적인 패턴이다.
- 주로 한 객체에 대한 View(Display)와 State(상태, 데이터)를 나누는 것에 많이 사용된다.
ⓒ Problem Description
- 하나의 상태에 대해서 다양한 형태로 표현해주는 시스템 개발에 사용된다.
ⓓ Solution Description
- 두 개의 추상 클래스, Observer, Subject를 이용해서 해결한다.
- Observer Object는 Observer Interface로부터 상속받은 객체로써, observer마다 인터페이스를 구현하는 메소드를 가지고
있다.
- Subject class는 Observer를 추가, 삭제하는 기능과 Observer 객체에게 상태의 변화를 알려주는 메소드를 가지고 있다.
ⓔ Consequences
- View에 따라서 전송 받은 데이터를 가공해야 하기 때문에 성능이 떨어 질 수 있다. 다른 말로 각 View에 대한 최적화된
데이터가 존재 하지 않기 때문에 데이터 전송 및 출력에 대한 속도 지연이 있을 수 있다.
2. Facade Pattern
ⓐ Name : Facade
ⓑ Description
- 본 패턴은 복잡한 서브시스템에 통일된 인터페이스를 제공함으로써 시스템의 복잡도를 낮추는 것을 목표로 한다.
- 주로 이벤트를 받는 중앙 class가 존재하여 사용자로부터 받은 이벤트를 분석하여 해당 클래스에게 전달하는 패턴을 말함.
ⓒ Problem Description
- 시스템의 중간에 배치시켜 시스템으로의 접근이나 조작을 용이 하게 만들며, 구조를 단순화시키기 위해서 사용한다.
ⓓ Solution Description
- Facade Object를 이용해서 각 클래스를 감싸준다.
- Facade Object는 컨트롤 할 각 클래스를 객체로 갖는다. 또한, 사용자의 이벤트를 분석하는 알고리즘을 갖고 있으며,
알고리즘 분석결과에 해당하는 Class object를 실행시킨다.
ⓔ Consequences
- 사용자가 원하는 특정 인터페이스를 준수하기 힘들다.
- 폴리모픽 기능을 지원해 줄 수 없다.
3. Iterator Pattern
ⓐ Name : Iterator
ⓑ Description
- 클래스 또는 객체의 캡슐화를 유지하고, 데이터 구조가 외부에 노출되지 않게 보호하면서, Aggregate class 원소를
순차적으로 접근 가능하게 하는 것을 목표로 한다.
- Aggregate 클래스를 매우 단순하게 유지하면서 동시에 여러 번 순회할 수 있게 제작한다.
ⓒ Problem Description
- 내부 구현에 대한 이해 없이 자료의 집합체를 탐색할 수 있게 만들기 위해서 사용한다.
ⓓ Solution Description
- 두 개의 Interface, iterator, collection의 구현으로 생성한다.
- Iterator interface를 상속받아 클래스를 만든다. 이는 Iterator를 순환하는 인터페이스이다.
- Collection interface를 상속받아 클래스를 만든다. 이는 어떻게 순환 과정을 제공할 것인가에 대한 인터페이스이다.
ⓔ Consequences
- 시스템을 지나치게 일반화한다.
4. Decorator Pattern
ⓐ Name : Decorator
ⓑ Description
- 객체에 추가적인 요건을 동적으로 첨가한다. 데코레이터를 통해서 서브클래스를 만드는 것을 통한 유연한 확장법을
제공해준다.
- 기본적인 데이터에 첨가할 데이터가 다양하고 일정하지 않을 때 사용하면 효율적이다.
ⓒ Problem Description
- 다른 객체에 영향을 주지 않고 특정 객체에 새로운 기능을 추가할 때 사용한다.
ⓓ Solution Description
- 자기가 감싸고 있는 클래스의 형식을 반영한 데코레이터를 생성한다. 이 데코레이터는 상속 도는 인터페이스를 통해 자신이
감쌀 클래스와 같은 형식을 갖는다.
- 데코레이터를 상속 받은 클래스는 새로운 기능을 더함으로써 행동을 확장해 간다.
ⓔ Consequences
- 클래스 수는 줄어드는 반면에 객체의 수가 많아진다.
- 필요이상으로 데코레이터를 사용하면 코드가 복잡해 질 가능성이 존재한다.