---
description: 옵저버 패턴에 대해 알아봅시다.
---

# 옵저버 패턴(Observer Pattern)

### **신문 구독**

옵저버 패턴은 신문 구독 매커니즘만 이해하면 쉽게 이해할 수 있습니다.

1. 신문사가 사업을 시작하고 신문을 찍어내기 시작합니다.
2. 독자가 특정 신문사에 구독 신청을 하면 매번 새로운 신문이 나올 때마다 배달을 받을 수 있습니다. 구독을 해지하기 전까지 신문을 계속 받을 수 있습니다.
3. 신문을 더 이상 보고 싶지 않으면 구독 해지 신청을 합니다. 그러면 더이상 신문이 오지 않습니다.
4. 신문사가 망하지 않는 이상 개인, 호텔, 항공사 및 기타 회사 등은 꾸준하게 신문을 구독하거나 해지합니다.

옵저버 패턴에선 신문사를 주제(subject), 구독자를 옵저버(observer)라고 부릅니다.

<figure><img src="https://blog.kakaocdn.net/dn/PxMUU/btsD3JeqpP8/VJVOCaWdcRizwoZEQT1VRk/img.jpg" alt=""><figcaption></figcaption></figure>

> 옵저버 패턴\
> 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고\
> 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의합니다.

&#x20;

따라서 주제 객체와 옵저버 객체는 1:N 의 관계로 정의됩니다.

옵저버 패턴은 여러 가지 방법으로 구현할 수 있지만, 보통은 주제 인터페이스와 옵저버 인터페이스가 들어 있는 클래스 디자인으로 구현합니다.

### **옵저버 패턴의 구조**

<figure><img src="https://blog.kakaocdn.net/dn/dSnKds/btsD3GvfdOZ/zyuvC6XJpKQ1xGRldMCPsk/img.jpg" alt=""><figcaption></figcaption></figure>

위와 같은 구조로 옵저버 패턴을 사용하면 여러 객체가 동일한 데이터를 제어하는 방법보다 더 깔끔한 객체지향 디자인을 만들 수 있습니다.

#### **느슨한 결합의 위력**

느슨한 결합(Loose Coupling)은 객체들이 상호작용할 수는 있지만, 서로를 잘 모르는 관계를 의미합니다. 느슨한 결합을 활용하면 유연성이 아주 좋아집니다. 옵저버 패턴은 훌륭한 예에 해당합니다.

* 주제는 옵저버가 특정 인터페이스(Oberser 인터페이스)를 구현한다는 사실만 압니다.
* 옵저버는 언제든지 새로 추가할 수 있습니다.
* 새로운 형식의 옵저버를 추가할 때도 주제를 변경할 필요가 전혀 없습니다.
* 주제와 옵저버는 서로 독립적으로 재사용할 수 있습니다.
* 주제나 옵저버가 달라져도 서로에게 영향을 미치지는 않습니다.

> 디자인 원칙\
> 상호작용하는 객체 사이에는 가능하면 느슨한 결합을 사용해야 한다.
