옵저버 패턴

ITKHJ·2023년 3월 15일
0

GoF의 디자인 패턴

목록 보기
9/16
post-thumbnail

옵저버 패턴

  • 다수의 객체가 특정 객체 상태 변화를 감지하고 알림을 받는 패턴
  • 이 패턴을 사용하면 발행(publish) - 구독(subcribe)패턴을 쉽게 구현할 수 있다.
    (pub - sub 패턴)
    ※ subject는 여러 옵저버들을 등록하거나 해지할 수 있는 기능을 제공

옵저버 패턴 사용 이유

user1은 메시지를 보내지만 그 메시지는 user2가 "디자인 패턴"을 조회하기 전까지는 
user2에게 전달되지 않고, 받고 싶다면 user2가 직접 호출을 해야하는 문제점이 있음

Subscriber

  • 옵저버 인터페이스 해당(subscriber)

User

  • ConcreteObserver에 해당
  • 간단하게 들어온 메시지를 출력하는 역할만 함
  • subscriber를 구현하는 구현체

ChatServer

  • 여러 옵저버들을 등록하거나 해지할 수 있는 역할
  • 주제별로 옵저버들을 묶어둘 것이기 때문에 Map 사용(subscriber들의 목록을 관리)
  • Subject에 해당

Client

  • 클라이언트는 ChatServer의 sendMessage 메소드를 호출하여 subject가 일치하는 메시지만 보낸다.

옵저버 패턴의 장/단점

장점

  • 상태를 변경하는 객체(publisher)와 변경을 감지하는 객체(subscriber)의 관계를 느슨하게 유지할 수 있다.(코드 작성이 쉽고, 변경이 쉽고, 테스트 하기도 쉽고, 재사용하기도 쉽다)
  • Subject의 상태 변경을 주기적으로 조회하지 않고 자동으로 감지할 수 있다.
  • 런타임에 옵저버를 추가하거나 제거할 수 있다.

단점

  • 복잡도가 증가한다.
  • 다수의 Observer 객체를 등록 이후 해지 않는다면 Memory leak이 발생할 수도 있다.
profile
모든 업무 지식 작성하자!

0개의 댓글