-
2. Observer Pattern카테고리 없음 2020. 4. 13. 13:04
1. 옵저버 패턴?
위키백과 정의)
옵저버 패턴(observer pattern)은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 모델로 알려져 있기도 하다.
나만의 정의)
출판사(subject) + 구독자(observer) = 옵저버 패턴
출판사를 주제(subject), 구독자를 옵저버(observer)라고 부른다는 것만 외우자.
현실적인 예와 비교해보자면, 구독자들이 출판사에 구독을 신청하면, 출판사는 새로운 책이 출간될 때마다 구독자들에게 책을 나눠주고 구독자들이 구독을 원치않으면 구독을 취소할 수도 있다는 것과 동일한 개념이다.
즉, 하나의 주제(Subject)객체에 여러 옵저버(Observer) 객체들이 구독을 신청(add)하면, 주제 객체는 변경사항이 생길때마다(update) 옵저버들에게 변경데이터를 전달한다. 그리고 옵저버들은 해당 데이터가 더 이상 필요하지 않다면 구독 취소(remove)할 수도 있다.
좀 더 전문적으로 말하면, 옵저버패턴은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의한다.
2. Class Diagram
3. 느슨한 결합(Loose Coupling)
두 객체가 느슨하게 결합되어 있다는 것은, 그 둘이 상호작용을 하긴 하지만 서로에 대해 잘 모른다는 것을 의미하며, 옵저버 패턴에서는 주제와 옵저버가 느슨하게 결합되어 있는 객체 디자인을 제공한다.
4. 자바 내장 옵저버 객체
1) 사용
자바에 내장된 옵저버 패턴은 위에서 구현한 것과는 다르게 작동한다. 가장 큰 차이점은 주제객체에서 Observable 클래스를 확장하면서 addObserver, deleteObserver, notifyObservers 같은 메소드를 상속받는다. java.util.Observer를 호출해서 사용할 수 있다.
2) 단점
a. Observable이 클래스이기 때문에 서브클래스를 만들어야하며, 그래서 재사용성에 제약이 생기게 된다.
b. Observable 인터페이스라는 것이 없기 때문에 자바에 내장된 Observer API하고 잘 맞는 클래스를 직접 구현하는 것이 불가능하다.
c. Observable 클래스의 핵심 메소드를 외부에서 호출할 수 없다.