본문 바로가기
Rx

Observable -3 (subscribe함수와 Disposable객체)

by 봄석 2018. 12. 23.

본 내용은 필자가 학습한 내용을 정리하는 내용입니다.

대부분 의 내용이 아래 책의 내용이므로 원서를 구매해서 직접보시는걸 추천드립니다!

RxJava 프로그래밍 리액티브 프로그래밍 기초부터 RxAndroid까지 한 번에

유동환 , 박정준 지음 | 한빛미디어 | 2017년 09월 04일 출간

http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788968488658&orderClick=LAV&Kc=


subscribe() 함수와 Disposable 객체

RxJava는 내가 동작시키기 원하는 것을 사전에 정의해 둔 다음 실제 그것이 실행되는 시점을 조절할 수 있다. 이때 사용하는것이 subscribe()함수 입니다. Observable은 just()등의 팩토리 함수로 데이터 흐름을 정의한 후 subscribe() 함수를 호출해야 실제로 데이터를 발행합니다.


RxJava는 선언형 프로그래밍 

명령형 프로그래밍의 반대말로 어떤 방법(how)으로 동작하는 지가 아니라 프로그래밍 할 대상이 무엇(what)인지를 알려주는것을 의미. 목표를 명시할 뿐 실행할 알고리즘을 명시하지 않는다

참고 - https://ko.wikipedia.org/wiki/%EC%84%A0%EC%96%B8%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D




subscribe() 함수의 주요 원형

1) Disposable subscribe()

2) Disposable subscribe(Consumer<? super T> onNext)

3) Disposable subscribe(Consumer<? super T> onNext, Consumer<? super java.lang.Throwable> onError)

4) Disposable subscribe(Consumer<? super T> onNext, Consumer<? super java.lang.Throwable> onError, Action onComplete)



1) 인자가 없는 subscribe()함수는 onNext와 onComplete 이벤트를 무시하고 onError 이벤트가 발생했을 때만 OnErrorNotImplementedException을 던집니다(throw). 따라서 Observable로 작성한 코드를 테스트 하거나 디버깅할때 사용

2) 인자가 1개있는 오버로딩은 onNext 이벤트를 처리합니다. onError 이벤트가 발생했을 때OnErrorNotImplementedException을 던집니다(throw). 

3) 인자가 2개인 함수는 onNext와 onError 이벤트를 처리합니다

4) 인자가 3개인 함수는 onNext, onError, onComplete 이벤트를 모두 처리할 수 있습니다.





위 함수의 원형 은 모두 Disposable 인터페이스의 객체를 리턴합니다.

Disposable은 RxJava 1.x의 Subscription(구독) 객체에 해당합니다.


void dispose()

boolean isDisposed() 



위의 두개 함수만 있다




Disposable 인터페이스 함수

dispose()는 Observable에게 더이상 데이터를 발행하지 않도록 구독을 해지하는 함수이다.

Observable 계약(Observable Contract)에 따르면 Observable이 onComplete 알림을 보냈을 때 자동으로 dispose()를 호출해 Observable과 구독자의 관계를 끊는다.


따라서 onComplete 이벤트가 정상적으로 발생했다면 구독자가 별도로 dispose()를 호출할 필요는 없다.


isDistposed() 함수는 Observable이 데이터를 발행하지 않는지(구독을 해지했는지)를 확인하는 함수이다.




댓글