[디자인 패턴] 옵저버 패턴

[원본 링크]

옵저버(Observer) 패턴은 말 그대로 관찰(Observe)에 대한 패턴이다.
어떤 main 객체의 상태를 여러 객체가 공유(관찰)할 필요가 있을 때 사용한다.

여기서 관찰의 대상이 되는걸 주체(Subject).
관찰자를 옵저버(Observer)라고 한다.

하나의 주체에는 여러개의 관찰자가 등록될 수 있으며,
주체의 상태가 바뀔 경우, 주체에서는 모든 관찰자들에게 알림을 보낸다. 데이터와 함께.

코드부터 보자.
인터럽트가 걸리면 등록된 관찰자들에게 현재 시간을 보내는 프로그램을 짜보려 한다.

꼭 해야하는건 아니지만. 주체에도 인터페이스를 만들어주는 편이 좋겠다. image

image 간단하다.

옵저버 인터페이스는 더 간단하다. image

image update 메서드는 주체에서 옵저버에게 데이터를 던져줄 때 사용될 것이다.

이제 주체를 구현해보자.
최대한 단순하게 구현했다. image

image 옵저버를 저장할 리스트를 두고, 인터페이스대로 구현했다.
notify 메서드에선 옵저버들에게 데이터를 뿌려준다.

이제 옵저버를 대충 만들어보자.
update로 데이터만 받아먹고. 나머지는 지들 맘대로 해도 된다. image

image

그럼 이런식으로 사용이 가능하다. image

image 잘 돈다.
보통 notify는 주체 객체의 다른 메서드에서 내부호출되겠지만...
그냥 예를 들기 위함이다.

그렇다.


참조
"헤드 퍼스트 디자인 패턴"
https://flowarc.tistory.com/entry/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EC%98%B5%EC%A0%80%EB%B2%84-%ED%8C%A8%ED%84%B4Observer-Pattern