컴퓨터 공학

객체지향개발론 4장 옵저버패턴

혼새미로 2015. 11. 27. 02:19
반응형

4. 옵저버 패턴

옵저버 패턴 : 객체가 관심있어 하는 사건의 발생을 알려주어야 할 때. 관찰하는 객체가 능동적으로 관찰하는 것이 아니라 관찰대상으로부터 어떤 사건이 발생하였을 때 수동적으로 통보해주길 기다림

) --> 

한 객체와 다중 객체간의 의존관계를 정의하며 한 객체에 의존하는 모든 객체들은 의존하는 객체의 상태가 변하면 항상 자동으로 통보를 받음


 

) --> 

SubjectObserver에 대해 알고있는 유일한 정보는 Observer interface를 구현하고 있다는 점임.(update 메소드를 가지고있음)

Observer를 쉽게 추가할 수 있으며, 기존 Observer를 쉽게 제거할 수 있음.

새로운 종류의 Observer를 추가하기 위해 Subject를 변경할 필요가 없음.

ObserverSubject의 수정은 서로에게 영향을 주지 않음.

) --> 

pull보다 push를 사용한 이유 : push subject가 통보할 때 옵저버에게 정보까지 제공하는 것이고, pull은 서브젝트가 옵저버에게 변경사실이 있다는 것만 통보하고 정보는 옵저버가 별도로 요구하여 받음

옵저버 측면에서는 더 편함

pull을 할 경우 서브젝트에 대해 더 많은 정보를 알아야 하며 호출해야 하는 메소드도 많은 수 있음(tight-coupling )

tight coupling : 결합성이 높아지는 것

하지만 옵저버에 따라 필요로 하는 정보가 다를 수 있어 불필요한 정보를 전달받을 수 있기 때문에 pull이 나을 수 있음.

) --> 

한 옵저버가 다중 서브젝트를 관찰할 때 : 옵저버는 어떤 서브젝트가 통보하였는지 알 수 있어야 함. 각 서브젝트마다 호출하는 업데이트 메소드가 달라야 함. 가장 쉬운방법은 서브젝트 자체를 전달하고 pull방법으로 데이터를 취하는 것.

) --> 

패턴의 특성 : 행위

수준 : 컴포넌트

용도:

최소 하나 이상의 서브젝트가 있을 때

한 객체의 상태변화가 얼마나 많은 다른 객체에 영향을 줘야 하는지 알 수 없을 때

옵저버들이 하나의 응용 또는 여러 응용에 따라 다양해질 수 있을 때

장점:

서브젝트에 대한 수정 없이 옵저버를 추가할 수 있으며 동적으로 추가/제거 가능(하지만 옵저버는 상대적으로 서브젝트에 대한 의존도가 있음

서브젝트는 옵저버가 업데이트 메소드를 가지고 있다는 것 외에 알 필요가 없음

반응형