하단의 Reference를 참조하여 작성, 주요 사용되는 RxJava 클래스와 Observable에서 호출되는 메소드를 다룸
RxJava Class
-
Observable
이벤트를 발생시키는 주체, onNext / onCompleted / onError를 이용하여 이벤트를 발생 시킴 -
Subscriber
이벤트를 전달받는 객체 -
PublishSubject
구독한 시점으로 부터(subscribe 호출) 발생되는 이벤트(onNext, onError, onCompleted)를 전달 받음 -
BehaviorSubject
구독 전 (subscribe 호출 전) 발생된 이벤트가 한 건이라도 있으면 구독 시점에 해당 이벤트(한 건만)를 전달 받음 -
CompositeSubscription
Subscriber를 그룹화 함, add로 Subscriber를 추가하며 clear로 unsubscribe 처리
Observable Method
-
just(T...)
인자로 전달 받은 객체를 그냥 단순하게 subscribe onNext에 전달 -
from(Iterable<? extends T>)
List에 저장된 Item을 하나씩 전달 -
flatMap(Func1<? super T,? extends Observable<? extends R>>)
T를 매개변수로 전달받아 R로 리턴
인자로 전달 받은 T를 다시 Observable로 포장하여 리턴 처리
관찰하고 있는 이벤트를 변형 -
concanMap(Func1<? super T,? extends Observable<? extends R>>)
flatMap과 유사, flatMap은 결과 처리의 순서를 신경쓰지 않는 반면에 concanMap는 이벤트의 처리 결과가 순서대로 출력 (참조) -
filter(Func1<? super T, Boolean>)
return이 true 일 때 이벤트 발생 -
zip(Observable<? extends T1>, Observable<? extends T2>, Func2<? super T1,? super T2,? extends R>)
Observable 마지막 인자인 Func2로 값을 조합하여 넘김
T1과 T2를 조합하여 새로운 R을 생성 -
buffer(int)
지정된 시간동안 발생한 이벤트를 List로 저장하고 있다가 이벤트를 발생 시킴 -
buffer(Observable<B> boundary)
발생한 데이터를 저장하고 있다가 boundary에 지정된 시간이 지나면 이벤트를 발생 시킴 -
debounce(long, TimeUnit)
이벤트 발생 종료 후 지정된 시간동안 이벤트가 발생하지 않으면 이벤트를 발생 시킴 -
asObservable()
Observable 객체를 전달 받음 -
skip(int)
int로 지정된 개수 만큼의 이벤트를 무시하고 그 이후의 이벤트만 발생시킴 -
combineLatest(Observable<? extends T1>, Observable<? extends T2>, Func2<? super T1, ? super T2, ? extends R>)
모든 Observable에서 이벤트가 발생되면 Func2로 전달하여 이벤트를 처리하고 새로운 이벤트를 발생 시킴 -
merge(Observable<? extends Observable<? extends T>>)
다수의 Observable를 병합하여 이벤트가 발생 된 순서대로 이벤트를 전달, 한 Observable에서 error가 발생하면 다른 Observable에서 발생된 이벤트는 전달하지 않음 -
timer(long, TimeUnit)
지정된 시간만큼 이벤트 전달을 딜레이 시킴 -
interval(long, TimeUnit)
이벤트를 반복하여 발생 시키지만 지정된 시간동안 딜레이 시킴 -
interval(long, long, TimeUnit)
최초 첫번째 인자 값 만큼 시간을 딜레이시키고 그 이후에는 2번째 인자에 지정된 시간 만큼 딜레이 시킴 -
take(int)
인자로 지정된 개수 만큼 이벤트를 발생 시키고 그 이후 이벤트는 발생시키지 않음(onCompleted 발생)
interval과 같이 사용하면 지정된 시간만큼 해당 이벤트를 반복하여 발생시키지만 take로 지정된 개수만 발생 -
retryWhen(Func1<? super Observable<? extends Throwable>,? extends Observable<?>>)
onError 이벤트가 발생하게되면 지정된 시간만큼 딜레이 시킨 뒤 재시도 -
defer(Func0<Observable<T>>)
subscribe가 호출 되는 순간 인자로 지정된 Func이 실행되고 리턴 받은 Observable의 이벤트를 전달 -
doOnTerminate(Action0)
onCompleted나 onError가 발생하면 호출되는 메소드, 인자 값으로 처리 할 작업을 넘김 -
doOnUnsubscribe(Action0)
unsubscribed가 호출되면 호출되는 메소드, onCompleted나 onError가 발생하면 unsubscribed가 발생하게 되는데doOnTerminate(Action0)
와 비슷하지만 unsubscribed를 강제적으로 호출해야할 경우가 발생하기 때문에 해당 메소드 사용을 추천