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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://devlee.gitbook.io/docs/book/undefined/observer-pattern.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
