디자인 패턴/행위 패턴

Observer 패턴

언린이 2021. 10. 19. 09:54

Observer 패턴은 한 객체의 상태 변화에 따라 다른 객체의 상태도 연동되도록 일대다 객체 의존 관계를 구성하는 패턴입니다.

 

 

구조

  • Observer
    • 데이터의 변경을 통보 받는 인터페이스입니다.
    • 즉, Subject에서는 Observer 인터페이스의 update 메서드를 호출함으로써 ConcreteSubject의 데이터 변경을 ConcreteObserver에게 통보합니다.
  • Subject
    • ConcreteObserver 객체를 관리합니다.
    • Observer 인터페이스를 참조하여 ConcreteObserver를 관리하므로 ConcreteObserver의 변화에 독립적일 수 있습니다.
  • ConcreteSubject
    • 변경 관리 대상이 되는 데이터가 있는 클래스입니다.
    • 데이터 변경을 위한 메서드인 SetState가 있습니다.
    • setState 메서드에서는 자신의 데이터인 subjectState를 변경하고 Subject의 notifyObservers 메서드를 호출해서 ConcreteObserver 객체에 변경을 통보합니다.
  • ConcreteObserver
    • ConcreteSubject의 변경을 통보 받는 클래스입니다.
    • Observer 인터페이스의 update 메서드를 구현함으로써 변경을 통보 받습니다.
    • 변경된 데이터는 ConcreteSubject의 getState 메서드를 호출함으로써 변경을 조회합니다.

 

 

활용 상황

  • 어떤 객체의 상태 변화를 자동으로 알아야 할때 유용합니다.

 

 

Observer 패턴의 장단점

  • 장점
    • 실시간으로 한 객체의 변경사항을 다른 객체에 전파할 수 있습니다.
    • 느슨한 결합으로 시스템이 유연하고 객체간의 의존성을 제거할 수 있습니다.
  • 단점
    • 너무 많이 사용하게 되면, 상태 관리가 힘들 수 있습니다.
    • 데이터 배분에 문제가 생기면 자칫 큰 문제로 이어질 수 있습니다.

'디자인 패턴 > 행위 패턴' 카테고리의 다른 글

Chain of responsibility 패턴  (0) 2021.10.29
Iterator 패턴  (0) 2021.10.26
Visitor 패턴  (0) 2021.10.23
Command 패턴  (0) 2021.10.16
State 패턴  (0) 2021.10.12