프로그래밍[Univ]/소프트웨어 공학론

[소프트웨어공학론] Design Pattern

Cloud Travel 2013. 1. 16. 21:43

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

  - 클래스 수는 줄어드는 반면에 객체의 수가 많아진다. 

  - 필요이상으로 데코레이터를 사용하면 코드가 복잡해 질 가능성이 존재한다.