RxJava - Observer Pattern

Ddudduu·2021년 12월 15일
0

프로그래밍 언어론 시간에 분명 배웠는데 다 까먹었다
(당당)

RxJava (뿐만 아니라 Rx 포함!) 는 Observer Pattern 을 기반으로 하기 때문에, RxJava 써보기 전에 Observer Pattern 을 먼저 공부해볼랍니다!


정의

  • Observer 의 사전적 정의는 관찰자, 목격자이다.
    말 그대로 👀 값을 관찰 👀 하는 디자인 패턴이다.



예시1


(출처: https://refactoring.guru/design-patterns/observer)

  • 그림에서
    🏐 공 던지는 애 : A
    👀 관찰하고 있는 애들 : B,C,D ... 라고 칭해보자.

    1) A 는 던지는 공의 개수를 바꾸거나 공을 던지지 않거나 등등 다양한 행동을 할 것이다. 그럼, A 가 발행하는 값계속 바뀔 것!

    2) B,C,D... 는 A 를 쳐다보고 있으면 값이 바뀌는 걸 알게된다.

    3) 그럼 B,C,D 들이 친구들한테 "A 가 공을 안던져!" , "A 가 공을 10개 던져!" 이렇게 알려줄 수도 있고 인스타에 올릴 수도 있고, 뭐 그렇겠지?

용어 및 프로세스

  • 💻프로그래밍에서는?✏️

    1) A : Subject
    값을 발행하는 주체이기 때문!

    2) B,C,D : Observer
    Subject 를 구독 (Subscribe) 하고 관찰 (Observe) 하다가, 값이 변경되면 알림을 받는다. (Notify)

    3) 바뀐 내용으로 데이터를 처리하거나 화면에 보여주는 작업들을 수행한다.

    4) 등록을 취소 (Remove) 하면, 더 이상 알림이 오지 않는다.


예시2

아주 친숙한 예제를 하나 더 들자면, 유튜브 구독!
내가 조아하는 브이로그 유튜버 중에 김가을이라고있는데..

1) 구독자인 내가 (Observer) 김갈 언니 (Subject)를 구독 (Register)한다.

2) 가으리 언니 New Video!📸 가 올라오면, 나한테 알림이 온다. (Notify)

3) 재밌게 본다.

4) (그럴 일은 없겠지만) 구독 취소 (Remove) 하면, 새로운 비디오가 올라와도 더 이상 알림이 오지 않는다. 🥲



UML 및 구조


(출처: https://ko.wikipedia.org/wiki/옵서버_패턴)

구조를 살펴보면..

  • Subject 인터페이스
    • registerObserver() 으로 등록하고, unregisterObserver() 으로 등록을 해제해 알림을 받지 않는다.
  • ConcreteSubject
    • Subject 구현
    • notifyObservers() 을 호출해 Observer 에게 변경 사실을 알려준다.
  • Observer 인터페이스
    • notify() 를 통해 변경됨을 알 수 있다.
  • ConreteObserver
    - Observer 구현



사용하는 이유?

  • 등록만 하면 변경된 값을 자동으로 받을 수 있기 때문에 일일이 업데이트하지 않아도 된다!
    ▶️ 사용자 입력같은 이벤트들 효과적으로 처리 가능

  • Subjectd 가 Observer 코드를 몰라도 그냥 알려주기만 하면 끝!
    ▶️ 결합도가 낮아진다. (loose coupling)
    ▶️ 수정에도 용이하고
    & Observer 를 새로 등록하거나 해제하는 것도 자유롭다.

profile
Android

0개의 댓글