핵심 의도

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

신문 구독 매커니즘과 유사하다! 신문사는 사업을 시작하고 신문을 찍어낸다. 독자가 구독 신청을 하면 새로운 신문이 나올 때마다 배달을 받을 수 있다. 신문을 더 이상 보고 싶지 않으면 구독 해지 신청을 한다. 옵저버 패턴에서는 신문사를 Subject, 구독자를 Observer라고 부른다.

적용 상황

특정 상태의 쓰기와 읽기 책임이 명확하게 분리되는 경우 사용할 수 있다. 특히 쓰기는 한 곳에서 발생하는데 읽기는 여러 곳에서 발생하면 의존 관계를 더 유연하게 구성할 수 있다.

솔루션의 구조와 각 요소의 역할

Untitled

객체에게 책임을 분할하기

상태를 저장하고 제어(write)하는 객체는 Subject 뿐이며, Observer는 상태 변화를 기다리고 사용하는(read) 의존 객체이다. 그래서 Subject는 상태를 관리하는 책임, 옵저버 목록을 관리하고 연락하는 책임을 가진다. 옵저버는 Subject로부터 연락을 받는 책임과 변경된 상태를 사용하는 책임을 가진다.

구현 포인트