Observer Pattern
옵저버 패턴이란?
한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의해요.
일대다 관계는 주제(Subject) 와 옵저버(Observer) 에 의해 정의돼요.
옵저버는 주제에 의존하고
주제의 상태가 바뀌면 옵저버한테 연락이 가고
연락방법에 따라 옵저버에 있는 값이 새로운 값으로 갱신될 수도 있어요.
클래스 다이어그램
Subject 인터페이스는 객체에서 옵저버로 등록하거나 옵저버 목록에서 탈퇴하고 싶을 때는 이 인터페이스에 있는 메소드를 사용하죠
옵저버가 될 가능성이 있는 객체에서는 반드시 Observer 인터페이스를 구현해야 해요. 이 인터페이스에는 주제의 상태가 바뀌었을 때 호출되는 update() 메소드가 있어요.
주제 클래스(ConcreteSubject)에는 옵저버 등록 및 해지를 위한 메소드 외에 상태가 바뀔때마다 모든 옵저버들에게 연락을 하기 위한 notifyObservers() 메소드가 있어요.
Observer 인터페이스를 구현한 클래스는 옵저버가 돼요. 각 옵저버는 특정 주제 객체에 등록을 해서 연락을 받을 수 있어요.
느슨한 결합 (Loose Coupling)
두 객체가 느슨하게 결합되어 있다는 것은, 그 둘이 상호작용을 하긴 하지만 서로에 대해 잘 모른다는 것을 의미해요.
주제는 옵저버에 대해서 아는 것은 옵저버가 특정 인터페이스(Observer)를 구현했다는 것 뿐이에요. 옵저버 무엇을 하는지는 모르지요
새로운 형식의 옵저버를 추가하려고 할 때 주제를 변경할 필요가 없어요. 새로운 클래스에서 Observer 인터페이스를 구현하고 옵저버로 등록하기만 돼요.