• 객체의 변경사항을 상대 클래스나 객체에 의존하지 않고 통보하고자 하는 경우에 사용
  • 서로 상호작용하는 객체 사이의 결합을 느슨하게 해주어 두 객체 모두 독립적으로 재사용 가능하도록 함
  • Subject : ConcreteObserver객체를 관리하는 요소
  • Observer : 데이터의 변경을 통보 받는 인터페이스, ConcreteSubject의 데이터 변경을 ConcreteObserver에게 통보
  • ConcreteSubject : 데이터를 가지고 있는 클래스, Subject의 notifyObservers메서드를 통해 ConcreteObserver에게 변경을 통보
  • ConcreteObserver : 변경을 통보받는 클래스, update메서드를 구현함으로써 변경을 통보받음, 변경된 데이터는 ConcreteSubject의 getState메서드를 호출함으로써 받음