프로그래밍 언어론 시간에 분명 배웠는데 다 까먹었다
(당당)
RxJava (뿐만 아니라 Rx 포함!) 는 Observer Pattern 을 기반으로 하기 때문에, RxJava 써보기 전에 Observer Pattern 을 먼저 공부해볼랍니다!
(출처: https://refactoring.guru/design-patterns/observer)
아주 친숙한 예제를 하나 더 들자면, 유튜브 구독!
내가 조아하는 브이로그 유튜버 중에 김가을이라고있는데..
1) 구독자인 내가 (Observer) 김갈 언니 (Subject)를 구독 (Register)한다.
2) 가으리 언니 New Video!📸 가 올라오면, 나한테 알림이 온다. (Notify)
3) 재밌게 본다.
4) (그럴 일은 없겠지만) 구독 취소 (Remove) 하면, 새로운 비디오가 올라와도 더 이상 알림이 오지 않는다. 🥲
(출처: https://ko.wikipedia.org/wiki/옵서버_패턴)
구조를 살펴보면..
registerObserver()
으로 등록하고, unregisterObserver()
으로 등록을 해제해 알림을 받지 않는다.notifyObservers()
을 호출해 Observer 에게 변경 사실을 알려준다.notify()
를 통해 변경됨을 알 수 있다.등록만 하면 변경된 값을 자동으로 받을 수 있기 때문에 일일이 업데이트하지 않아도 된다!
▶️ 사용자 입력같은 이벤트들 효과적으로 처리 가능
Subjectd 가 Observer 코드를 몰라도 그냥 알려주기만 하면 끝!
▶️ 결합도가 낮아진다. (loose coupling)
▶️ 수정에도 용이하고
& Observer 를 새로 등록하거나 해제하는 것도 자유롭다.