Observer Pattern

윤세영·2023년 7월 6일
0

DesignPattern

목록 보기
13/15

정의

  • 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들이 자동으로 갱신되는 방식으로 객체들 간에 one-to-many 의존성을 정의한다.
  • 객체의 상태 변화를 관찰하는 Observer들을 객체에 등록하여 상태 변화가 있을 경우 객체가 메소드를 통해 Observer들에게 알리는 Design pattern이다.
  • 주로 분산 이벤트 핸들링을 구현하는데 사용하거나, 하나의 객체에 여러 개가 의존할 경우 사용하는 것이 대부분이다.
자바에는 java.util.Observable이라는 API가 있다. 하지만 interface가 아니라 class이기에 이미 다른 super class를 extends하고 있는 class에서는 사용할 수 없다는 점과, 직접 구현이 불가능하다는 단점이 존재한다. 그리고, 핵심 method(‘setChange()’)는 protected로 선언이 되어있기때문에 해당 method를 외부에서 사용하는 것이 불가능하다 라는 단점이 있다.

조건

  • Loose-Coupling
    • 필요한 이유는 객체 간의 결합도가 높아질수록 유지보수는 힘들기 때문이다.
    • Loose-Coupling의 특징으로는 주체가 observer에 대해서 observer interface를 implement하고 있다는 점을 제외하고는 알 수 있는 정보가 없다.
    • Loose-Coupling의 장점은 Observer를 언제든지 추가할 수 있고, 새로운 Observer라 해도 주체를 변경할 필요가 없으며 주체와 observer를 독립적으로 사용할 수 있다.
    • 또한 Observer가 바뀌어도 서로 영향을 미치지 않는다는 것이다.

구성

  • 2개의 역할을 하는 interface(subject, observer)를 생성한다.
  • subject라는 interface는 observer들을 관리하는 method들을 가진다.
  • 이 method들은 observer를 add, delete, notifyObserver 이렇게 3가지 역할을 한다.
  • Observer interface는 정보를 업데이트 해주는 update method를 가진다.
  • Subject를 implment한 class는 정보를 제공하는 subject가 되며 observer 객체들을 가진다.
  • 그리고 observer interface를 implement한 class는 notifyObserver method를 호출하면서 알려줄 때마다 update method가 호출된다.

정리

  • Observer pattern은 한 object의 state가 바뀌면 해당 object에 의존하는 다른 object들에게 신호를 보내고 자동으로 정보가 갱신되는 1:N의 관계를 가진다.
  • 연결은 interface를 이용하여 loose-coupling을 유지한다.
  • Observer pattern은 push 방식(주체 object에서 observer로 데이터를 보내는 방식)과 pull 방식(observer에서 주체 object의 데이터를 가져가는 방식)으로 언제든지 구현할 수 있다.
  • JAVA에서는 Observable class와 Observer interface를 제공한다.

구현 (팬관리)

profile
Frontend

0개의 댓글