옵저버 패턴

기술노트
Admin (토론 | 기여)님의 2025년 9월 6일 (토) 05:05 판 (Gemini 벌크 업로더로 자동 업로드)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

👀 옵저버 패턴 (Observer Pattern)

옵저버 패턴은 객체 지향 디자인 패턴 중 하나로, 한 객체의 상태가 변하면, 그 객체에 의존하는 다른 객체들에게 자동으로 알림(notify)을 보내고 업데이트할 수 있게 만드는 일대다(one-to-many) 의존성 패턴입니다.

상태를 가진 주체 객체(Subject)와, 그 상태를 관찰하는 관찰자 객체(Observer)들로 구성됩니다. 이는 마치 잡지를 구독하면, 새로운 호가 나올 때마다 구독자들에게 자동으로 배송되는 것과 같습니다.


👥 옵저버 패턴의 구성 요소

  • 서브젝트 (Subject) : 관찰의 대상이 되는 객체. '주제' 또는 '발행자(Publisher)'라고도 불립니다.

> * 자신을 관찰하는 옵저버들의 목록을 가집니다. (`addObserver`, `removeObserver`) > * 자신의 상태가 변경되면, 목록에 있는 모든 옵저버에게 변경 사실을 알립니다. (`notifyObservers`)

  • 옵저버 (Observer) : 서브젝트의 상태 변화를 통지받는 객체. '관찰자' 또는 '구독자(Subscriber)'라고도 불립니다.

> * 서브젝트로부터 상태 변경 알림을 받을 수 있는 `update()`와 같은 인터페이스를 가집니다. > * 알림을 받으면, 필요한 동작을 수행합니다.


⚙️ 동작 방식

1. 여러 옵저버 객체들이 서브젝트 객체에 자신을 '구독자'로 등록합니다. 2. 서브젝트의 상태에 변화가 생깁니다. 3. 서브젝트는 자신에게 등록된 모든 옵저버들에게 변경 사실을 알립니다. (`notify`) 4. 알림을 받은 각 옵저버들은 `update()` 메서드를 실행하여 자신의 상태를 갱신하거나, 필요한 동작을 수행합니다.


💡 개발자 핵심 Point

  • 옵저버 패턴은 느슨한 결합(Loose Coupling)을 구현하는 대표적인 방법입니다. 서브젝트는 옵저버가 누구인지, 무엇을 하는지 구체적으로 알 필요가 없으며, 오직 "알려준다"는 책임만 가집니다. 이를 통해 시스템의 유연성과 재사용성을 높일 수 있습니다.
  • GUI 프로그래밍에서 이벤트 리스너(Event Listener)가 옵저버 패턴의 가장 대표적인 예입니다. 버튼(서브젝트)을 클릭하면, 해당 클릭 이벤트를 구독하고 있던 리스너(옵저버)들이 동작합니다.
  • MVC(Model-View-Controller) 패턴에서도 모델(Model)의 데이터가 변경되었을 때, 뷰(View)에게 알려주어 화면을 갱신하는 데 사용됩니다.
  • 메시지 큐(Message Queue)를 사용하는 비동기 시스템이나, 반응형 프로그래밍(Reactive Programming)의 핵심 원리이기도 합니다.