4장. 옵저버 패턴
옵저버 패턴 : 객체가 관심있어 하는 사건의 발생을 알려주어야 할 때. 관찰하는 객체가 능동적으로 관찰하는 것이 아니라 관찰대상으로부터 어떤 사건이 발생하였을 때 수동적으로 통보해주길 기다림
) -->
한 객체와 다중 객체간의 의존관계를 정의하며 한 객체에 의존하는 모든 객체들은 의존하는 객체의 상태가 변하면 항상 자동으로 통보를 받음
) -->
Subject는 Observer에 대해 알고있는 유일한 정보는 Observer interface를 구현하고 있다는 점임.(update 메소드를 가지고있음)
새 Observer를 쉽게 추가할 수 있으며, 기존 Observer를 쉽게 제거할 수 있음.
새로운 종류의 Observer를 추가하기 위해 Subject를 변경할 필요가 없음.
Observer나 Subject의 수정은 서로에게 영향을 주지 않음.
) -->
pull보다 push를 사용한 이유 : push 는 subject가 통보할 때 옵저버에게 정보까지 제공하는 것이고, pull은 서브젝트가 옵저버에게 변경사실이 있다는 것만 통보하고 정보는 옵저버가 별도로 요구하여 받음
옵저버 측면에서는 더 편함
pull을 할 경우 서브젝트에 대해 더 많은 정보를 알아야 하며 호출해야 하는 메소드도 많은 수 있음(더 tight-coupling 됨)
tight coupling : 결합성이 높아지는 것
하지만 옵저버에 따라 필요로 하는 정보가 다를 수 있어 불필요한 정보를 전달받을 수 있기 때문에 pull이 나을 수 있음.
) -->
한 옵저버가 다중 서브젝트를 관찰할 때 : 옵저버는 어떤 서브젝트가 통보하였는지 알 수 있어야 함. 각 서브젝트마다 호출하는 업데이트 메소드가 달라야 함. 가장 쉬운방법은 서브젝트 자체를 전달하고 pull방법으로 데이터를 취하는 것.
) -->
패턴의 특성 : 행위
수준 : 컴포넌트
용도:
최소 하나 이상의 서브젝트가 있을 때
한 객체의 상태변화가 얼마나 많은 다른 객체에 영향을 줘야 하는지 알 수 없을 때
옵저버들이 하나의 응용 또는 여러 응용에 따라 다양해질 수 있을 때
장점:
서브젝트에 대한 수정 없이 옵저버를 추가할 수 있으며 동적으로 추가/제거 가능(하지만 옵저버는 상대적으로 서브젝트에 대한 의존도가 있음
서브젝트는 옵저버가 업데이트 메소드를 가지고 있다는 것 외에 알 필요가 없음
'컴퓨터 공학' 카테고리의 다른 글
컴파일러 - javacc로 계산기 만들기(소스) (0) | 2015.11.27 |
---|---|
객체지향개발론 4장 데코레이터 패턴 (0) | 2015.11.27 |
객체지향개발론_3장.전략패턴 (0) | 2015.11.27 |
2장. 객체지향 개발 절차와 UML (0) | 2015.11.27 |
객체지향개발론 1장 객체지향 프로그래밍 개념 재검토 (0) | 2015.11.27 |