옵저버 패턴이란?
옵저버 패턴(Observer Pattern)은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의한다.
옵저버 패턴에는 하나의 subject(상태를 저장하고 있는 객체)가 있고 object(상태를 전달받는 객체)로 이루어진 observer가 존재한다.
subject의 값이 변경될 때마다 observers로 묶여있는 그룹에 속해 있는 object들에게 변경 사항을 알려준다. (혹은 object들이 가져온다)
본 교재에서는 이를 그림으로 직관적이게 나타냈다.

Duck이라는 object가 observer에 등록을 요청한다. subject는 이를 받아들여 duck object를 observer 그룹에 넣어준다.
이제 Duck은 subject의 값이 바뀔 때마다 연락을 받을 수 있다.

observer에서 나가고 싶던 Mouse object는 subject에게 본인을 제거해줄 것을 요구했다. subject는 이를 받아들여 mouse를 observer에서 제외했다. 이제 Mouse는 값이 바뀌어도 연락을 받지 못한다.
옵저버 패턴의 구조
옵저버 패턴은 보통 subject interface + observer interface가 들어있는 class 디자인으로 구현한다.

subject와 observer의 interface가 존재하고 이를 구현하는 Concreate Class(구상 클래스)가 존재한다.
느슨한 결합
Loose Coupling(느슨한 결합)이란, 객체끼리 서로 상호작용을 하지만 서로를 잘 알지는 못하는 어색한 관계이다.
옵저버 패턴은 느슨한 결합을 보여주는 훌륭한 예시이다.
- subject는 observer가 특정 interface(observer interface라는 사실을 우리는 안다)를 구현한다는 사실만 알고 있다.
- observer가 무슨 일을 하는지, 어떤 클래스인지 알지 못한다.
- observer는 언제든지 새로 추가할 수 있다.
- 실행 중에 observer를 다른 observer로 바꿔도 subject는 계속해서 데이터를 전송할 수 있다.
- 변경/추가/제거가 모두 가능하다.
- 새로운 형식의 observer를 추가해도 subject를 수정할 필요가 없다.
- 새로운 class에서 observer interface를 구현하고 observer로 등록하면 되기 때문이다.
- subject와 observer를 독립적으로 재사용 할 수 있다.
- subject와 observer에 각각 변경이 생겨도 서로에게 영향을 미치지 않는다.
'Design Pattern' 카테고리의 다른 글
[Headfirst Design Pattern] 복합 패턴(Compound Patterns) (0) | 2024.06.13 |
---|---|
[Headfirst Design Pattern] 템플릿 메소드 패턴(Template Method Pattern) (0) | 2024.06.06 |
[Headfirst Design Parttern] 어댑터 패턴&퍼사드 패턴(Adapter Pattern & Facade Pattern) (0) | 2024.06.05 |
[Headfirst Design Pattern] 데코레이터 패턴(Decorator Pattern) (2) | 2024.04.24 |
옵저버 패턴이란?
옵저버 패턴(Observer Pattern)은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의한다.
옵저버 패턴에는 하나의 subject(상태를 저장하고 있는 객체)가 있고 object(상태를 전달받는 객체)로 이루어진 observer가 존재한다.
subject의 값이 변경될 때마다 observers로 묶여있는 그룹에 속해 있는 object들에게 변경 사항을 알려준다. (혹은 object들이 가져온다)
본 교재에서는 이를 그림으로 직관적이게 나타냈다.

Duck이라는 object가 observer에 등록을 요청한다. subject는 이를 받아들여 duck object를 observer 그룹에 넣어준다.
이제 Duck은 subject의 값이 바뀔 때마다 연락을 받을 수 있다.

observer에서 나가고 싶던 Mouse object는 subject에게 본인을 제거해줄 것을 요구했다. subject는 이를 받아들여 mouse를 observer에서 제외했다. 이제 Mouse는 값이 바뀌어도 연락을 받지 못한다.
옵저버 패턴의 구조
옵저버 패턴은 보통 subject interface + observer interface가 들어있는 class 디자인으로 구현한다.

subject와 observer의 interface가 존재하고 이를 구현하는 Concreate Class(구상 클래스)가 존재한다.
느슨한 결합
Loose Coupling(느슨한 결합)이란, 객체끼리 서로 상호작용을 하지만 서로를 잘 알지는 못하는 어색한 관계이다.
옵저버 패턴은 느슨한 결합을 보여주는 훌륭한 예시이다.
- subject는 observer가 특정 interface(observer interface라는 사실을 우리는 안다)를 구현한다는 사실만 알고 있다.
- observer가 무슨 일을 하는지, 어떤 클래스인지 알지 못한다.
- observer는 언제든지 새로 추가할 수 있다.
- 실행 중에 observer를 다른 observer로 바꿔도 subject는 계속해서 데이터를 전송할 수 있다.
- 변경/추가/제거가 모두 가능하다.
- 새로운 형식의 observer를 추가해도 subject를 수정할 필요가 없다.
- 새로운 class에서 observer interface를 구현하고 observer로 등록하면 되기 때문이다.
- subject와 observer를 독립적으로 재사용 할 수 있다.
- subject와 observer에 각각 변경이 생겨도 서로에게 영향을 미치지 않는다.
'Design Pattern' 카테고리의 다른 글
[Headfirst Design Pattern] 복합 패턴(Compound Patterns) (0) | 2024.06.13 |
---|---|
[Headfirst Design Pattern] 템플릿 메소드 패턴(Template Method Pattern) (0) | 2024.06.06 |
[Headfirst Design Parttern] 어댑터 패턴&퍼사드 패턴(Adapter Pattern & Facade Pattern) (0) | 2024.06.05 |
[Headfirst Design Pattern] 데코레이터 패턴(Decorator Pattern) (2) | 2024.04.24 |