디자인패턴

옵저버 패턴 (Observer pattern) 이란?

diligentdev 2024. 2. 9. 09:20
728x90

어떤 객체의 상태가 변할 때, 그와 연관된 객체들에게 알림을 보내는 디자인 패턴

 

 

 

subject(observable) interface는 3가지 기능을 가지고 있음

  • 구독
  • 구독취소
  • 노티
public interface Subject{
	void subscribe();
  void unsubscribe();
  void notifyObserver();
}

Observer interface는 1가지 기능

  • update()
  • subject의 상태변화를 update 받음

패턴사용시기

  • 앱이 한정된 시간, 특정 케이스에만 다른 객체를 관찰해야 하는 경우
  • 대상 객체의 상태가 변경될 때마다 다른 객체의 동작을 트리거해야 할 때

장점

  • subject의 상태 변경을 주기적으로 조회하지 않고 자동 감지 가능
  • 발행자(subject)의 코드를 변경하지 않고 새 구독자(observer)를 도입할 수 있어 OCP (OPEN CLOSE PRINCIPLE) 원칙을 준수
  • 런타임시전에 발행자와 구독 알림 관계를 맺을 수 있음
  • subject와 observer 객체의 관계를 느슨하게 유지할 수 있음 (느슨한 결합)

단점

  • 구독자는 알림 순서를 제어할 수 없음
  • 옵저버 패턴을 자주 구성하면 구조와 동작을 알아보기 힘들어 코드복잡도 증가
  • 다수 옵저버 객체 등록이후 해지하지 않으면 메모리 누수 발생할 수 있음

 

Java에서의 디자인 패턴

https://ddevgrit.tistory.com/15

 

JAVA에서의 Observer 패턴

옵저버 패턴을 구현 public class subjectimple extends Observable { void eatFood() { System.out.println("밥 먹는 다"); setChanged(); notifyObservers("밥"); } } notifyObservers: 구독자들에게 상태전달 setChanged: 내부 플래그를 true

ddevgrit.tistory.com

 

728x90