디자인패턴 - 옵저버(Observer) 패턴

김도현·2023년 11월 12일
0

TIL

목록 보기
60/76

Observer Pattern

옵저버 패턴이란?

옵저버 패턴(observer Pattern)은 옵저버(관찰자)들이 관찰하고 있는 대상이 상태가 변화가 있을 때마다 대상자는 직접 목록의 간 관찰자들에게 통지하고, 관찰자들은 알림을 받아 조치를 취하는 행동패턴이다.

옵저버 패턴은 여타 다른 디자인 패턴과 다르게 일대다(one-to-many)의존성을 가지는데, 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. Pub/Sub(발행/구독)모델로도 알려져 있기도 하다.

이 패턴을 이해하는데 있어 플렛폼의 구독시스템을 비교하면 된다. 플렛폼에서 새로운 컨텐츠가 올리면 구독자가 알림을 받느 형태이다. 이처럼 옵저버 패턴은 시청자(관찰자)가 필요한 정보에 구독하여 알림을 받는 형태이다.

  1. 옵저버 패턴에서는 한개의 관찰 대상자와 여러개의 관찰자로 일 대 다 관계로 구성되어 있다.
  2. Observer패턴에서는 관찰 대상의 상태가 바뀌면 변경사항을 옵저버 한태 통보해준다.
  3. 받은 정보를 활용하여 값을 추가, 수정, 삭제등의 적절한 행동을 수행한다(Update)
  4. 또한 Observer들은 언제든 관찰대상을 그룹에서 추가/ 삭제 될 수 있다. 그룹에 추가되면 관찰대상으로 부터 정보를 전달받게 될 것이며, 그룹에서 삭제될 경우 더 이상 정보를 받을 수 없게된다.

특징

패턴 사용 시기

  • 앱이 한정된 시간, 특정한 케이스에만 다른 객체를 관찰해야 하는 경우
  • 대상 객체의 상태가 변경될 때마다 다른 객체의 동작을 트리거해야 할때
  • 한 객체의 상태가 변경되면 다른 객체도 변경해야 할때, 그런데 어떤 객체들이 변경되어야 하는지 몰라도 될 때
  • MVC 패턴에서도 사용됨(Model, View, Controller)

장점

  • 상태 변화를 주기적으로 조회하지 않고 자동으로 감지가 가능하다.
  • 발행자의 코드를 변경하지 않고도 새 구독자 클래스를 도입할 수 있어 개방 페쇄 원칙(OCP) 준수한다.
  • 상태를 변경하는 객체와 변경을 감지하는 객체의 관계를 느슨하게 유지할 수 있다.

단점

  • 구족자는 알림 순서를 제어할 수 없고, 무작위 순서로 알림을 받습니다.
  • 옵저버 패턴을 자주 구성하면 구조와 동작을 알아보기 힘들어져 코드 복잡도가 증가한다.
  • 다수 옵저버 객체를 등록 이후 해지하지 않는다면 메모리 누수가 발생할 수도 있다.

0개의 댓글