RxJava 의 주요 클래스인 Observer, Observable, Disposable 을 알아보려고 한다.
Rx 관련 문서를 보다보면 마블 다이어그램을 정말 많이 볼 수 있는데,
데이터의 흐름을 확인할 수 있는 그림이다.
- ⭐️🔺🟢🟦 도형들 : Observable 이 내보낸 item 들 (데이터)
➡️ 화살표의 세로선 : Observable 이 성공적으로 (정상적으로) 종료됨을 알려준다.
더 이상 item 을 내보내지 않는다.
점선 화살표 & 박스 📦 : Observable 에 tranformation 이 적용되었다! 라는 걸 의미한다.
박스의 'flip' 과 같은 텍스트는 어떻게 변형할 건지를 나타낸다.
그림을 보면, 박스를 거쳐서 나온 도형들이 뒤집어져 있다. 'flip' 박스를 통과했으니 뒤집힌 도형들이 나오는 것!
➡️ 실선 화살표 (하단) : 변형된 결과를 나타내는 Observable
❌ 표시 : Observable 이 비정상적으로 종료된다면, 세로선 대신 X 로 표시한다.
그렇다면, Observable 과 Observer 를 어떻게 연결지을까?
🗞신문을 생각해보자.
관심있는 신문사가 있어서 매일 신문을 읽고 싶다면, 어떻게 해야될까?
신문사에 구독 신청을 해야한다.
Rx 에서도 똑같다! 신문을 발행하는 신문사가 Observable, 신문을 전달받는 나를 Observer 로 대입해보면 똑같다.
Observable : 매일 신문을 발행 == 데이터, item 을 방출
Observer : 신문을 전달 받음 == 데이터를 받아서 작업을 수행
이 함수를 호출해 구독을 시작한다.
이걸 호출해야만, Observable 이 발행하는 데이터를 Observer 가 받아서 써먹을 수 있음!
public final Disposable subscribe(@NonNull Action onComplete) {
Objects.requireNonNull(onComplete, "onComplete is null");
CallbackCompletableObserver observer = new CallbackCompletableObserver(onComplete);
subscribe(observer);
return observer;
}
Disposable 객체를 반환한다.
신문을 보다가 더이상 받고싶지 않다면, 구독 취소를 하면 된다.
이처럼 프로그래밍에서도 더이상 데이터를 전달 받지 않으려면 구독을 해제해야하는데, Disposable 을 통해 구독 해제 하면 된다!
void dispose();
을 통해서 구독을 해제할 수 있다.
더 이상 필요하지 않을 때 구독을 해제하면, 메모리 누수를 막을 수 있다
변수명.subscribe { 구독 후, 처리할 작업 }
.addTo(CompositeDisposable)
이런 형태로 사용하면 된다.
onNext()
: 새로운 item 을 내보낼 때마다 호출한다. 데이터가 바뀌었다고 알려주는 역할.onCompleted()
: 데이터 전달이 끝났을 때 호출한다.onError()
: 오류가 발생했을 때 호출한다. 요게 호출되면, onNext() 나 onCompleted() 는 더이상 호출되지 않는다.