옵저버 패턴(Observer Pattern)

츄비앙
2 min readSep 17, 2022

--

한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에 연락이 가고자동으로 내용이 갱신되는 방식입니다.
Observer Pattern (one-to-many)
주체 데이터가 바뀌면 모든 구독자에게 바뀌었다는 소식을 전달합니다.

장점

  1. 데이터를 주기적으로 갱신하지 않아도 Observer(구독자)로 등록하게 되면 최신 데이터로 받아옵니다.

2. Observer(구독자)로 등록 또는 해제가 가능합니다. (상호의존성 최소화)

3. Observer(구독자) 서로 간에는 모릅니다. (느슨한 결합)

단점

  1. Observer가 너무 많아질 경우 관리가 힘들어 질 수 있다.
  2. 큐 형태로 데이터 배분 처리가 되어 데이터 배분에 문제가 생기면 자칫 큰문제로 이어질 수 있다.
  3. 갑작스레 데이터가 변경이 될 경우에 원하는 결과값을 얻기 힘들 수 있다. (Thread-unsafe)
  4. Observer를 제때 제거하지 않으면 메모리 누수가 일어난다.
  5. 비동기 방식으로 원하는 순서대로 받지 못할 수 있다.

<예시>

주체 역할 클래스 — MessageSender

옵저버 인터페이스 — MessageObserver

옵저버 역할 1,2,3 — User1, User2, User3

실행 클래스

실행 결과

실행결과에서 선 ‘— — — — — — —’ 을 기준으로 구분지어 설명 드리면,

  1. User1, User2, User3 을 옵저버로 등록 후에 메세지 전달하니 모두 다 주체로부터 메세지 ‘Hello Everyone!!’을 전달받았습니다.
  2. User1을 옵저버에서 제거 후에 메세지를 전달하니 User1을 제외한 User2, User3가 주체로부터 메세지 ‘Big News!!’을 전달받았습니다.

--

--