본문 바로가기
카테고리 없음

옵저버 패턴(Observer Pattern)에 대하여

by sftt 2023. 12. 28.

옵저버 패턴(Observer Pattern)

옵저버 패턴은 객체들 간의 일대다 의존성 관계를 갖는 패턴으로, 어떤 객체의 상태가 변할 때 그 객체에 의존하는 다른 객체들이 자동으로 업데이트되는 방식을 제공합니다.

구성 요소

옵저버 패턴은 다음과 같은 구성 요소로 이루어져 있습니다.

  1. Subject(주체): 상태를 갖고 있는 객체로, 옵저버들이 자신의 상태 변화를 알아야 하는 대상입니다. 주체 객체는 옵저버를 등록 및 삭제할 수 있으며, 상태가 변동되었을 때 옵저버들에게 알릴 수 있습니다.
  2. Observer(옵저버): 주체 객체의 상태 변화를 감시하는 객체로, 주체 객체의 상태에 따라 특정 동작을 수행하게 됩니다. 옵저버들은 주체 객체에 등록되어야만 주체 객체의 상태 변화에 대한 알림을 받을 수 있습니다.

동작 과정

  1. 주체 객체는 옵저버들을 등록하고, 상태가 변동되면 등록된 옵저버들에게 알림을 보냅니다.
  2. 등록된 옵저버들은 주체 객체의 상태가 변화했음을 알리는 메서드를 호출받습니다.
  3. 옵저버들은 메서드 내에서 주체 객체의 상태를 확인하고, 해당 상태에 따라 필요한 동작을 수행합니다.

장점

  1. 주체 객체와 옵저버들 간의 강한 결합도를 피하고, 느슨한 결합도를 유지할 수 있습니다. 따라서 주체 객체의 변경이 옵저버들에게 영향을 덜 주게 됩니다.
  2. 새로운 옵저버를 추가하기 쉽습니다. 주체 객체에 영향을 주지 않으면서도 다양한 옵저버를 쉽게 확장할 수 있습니다.
  3. 이벤트 기반 시스템에서 유용하게 사용됩니다. 상태 변화에 대한 이벤트와 이를 처리하는 옵저버들을 유기적으로 연결할 수 있습니다.

예시

옵저버 패턴의 예시로, 온라인 쇼핑몰의 재고 알림 기능을 생각해보겠습니다. 여러 상품을 판매하는 쇼핑몰에서 주인장은 재고가 줄어들 시간을 알고 싶어합니다. 이때 옵저버 패턴을 활용할 수 있습니다.

Observer Pattern Example

  • Subject: 주인장 객체. 상품의 재고 상태를 갖고 있으며, 재고가 줄어들었을 때 등록된 모든 옵저버들에게 알려주는 역할을 합니다.
  • Observer: 온라인 쇼핑몰의 고객 객체들. 상품의 재고 변화에 따라 이메일, 푸시 알림 등의 방식으로 주인장에게 알림을 받을 수 있습니다.

주인장은 새로운 고객이 상품을 구매할 때마다 해당 상품의 재고를 1씩 감소시키게 됩니다. 재고가 감소되면 주인장은 등록된 모든 고객들에게 상품명과 함께 재고 알림을 보냅니다. 따라서 옵저버 패턴을 통해 주인장 객체와 고객 객체들 간의 느슨한 결합을 유지하면서 재고 변화를 감시할 수 있습니다.

마무리

옵저버 패턴은 주체 객체와 옵저버 객체 간의 효율적인 상호 작용을 제공하여 객체의 의존성을 관리하는 데 사용되는 디자인 패턴입니다. 이러한 패턴은 유연하고 확장 가능한 소프트웨어 시스템을 구축하는 데 도움이 됩니다.

댓글