* RxJava 권장하는 학습순서
-
Observable 클래스 명확하게 이해 (특히 뜨거운(Hot) Observable과 차가운(Cold) Observable의 개념을 꼭 이해해야 함)
-
간단한 예제로 map(), filter(), reduce, flatMap() 함수의 사용법을 익힙니다.
-
생성 연산자, 결합 연산자, 변환 연산자 등 카테고리별 주요 함수를 공부
-
스케줄러의 의미를 배우고 subscribeOn()과 observeOn() 함수의 차이를 알아둡니다.
5. 그 밖의 디버깅, 흐름 제어 함수를 익힙니다.
2장(Observable) => 3장(map-filter-reduce) => 4장(주요 연산자) => 5장(RxJava 때문에 달라지는 비동기 프로그래밍, 스케줄러) => 6장(RxAndroid) => 7장(디버깅, 예외처리)
-
자바 8을 사용하지 않아도 됨. 자바 8에서 제공하는 Consumer, Predicate, Function과 같은 함수형 인터페이스를 자체 구현했으므로 자바 6 이상이면 동작.
-
But, 8의 람다 표현식과 함수 레퍼런스를 활용하는 코드는 가독성을 좋게함. (람다식 & 함수 레퍼런스 공부)
-
------------------------------------------------------------------------------------------------
1. RxJava의 각 개념
(1) Observable
Observable.just(text)
- 관찰 가능한, 즉 데이터를 방출하는 스트림
- Observable.just(text)라고 하면, Observable이 text라는 데이터 하나를 just 방출했다고 이해
(2) Observer
.subscribe(fetchObserver());
- Observable에서 흘러나온 데이터를, Observer가 subscribe(구독)해서 반응
==> 이 때 이에 대한 연결(구독) 자체를 (3) Subscription이라고 하는 것
(4) Scheduler
- multi-thread를 적용하고자 할 때 사용.
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
- SubscribeOn은 main-thread가 아닌, worker-thread를 지정하는 것
- ObserveOn은 데이터를 가공해서 써먹을 때, 어디에 결과를 보낼 것이냐는 것
+
1. Hot Observable vs. Cold Observable
- Hot Observable: Observable을 생성하자마자 아이템들을 흘려보냄. 마우스 이벤트 , 키보드 이벤트 , 시스템 이벤트등이 주로 사용된다.
- Cold Observable: 생성하자마자가 아니라, 실행을 미루고 있다가 Subscribe할때 아이템들을 흘려보냄. 누가 구독해주지 않으면 데이터를 배출을 하지 않음. 일반적인 웹 요청, 데이터베이스 쿼리등이 사용되며 내가 요청하면 결과를 받는 과정을 거친다.
일반적인 방법이 Hot Observable이고,
Cold Observable은 fromCallable등의 Operator로 구현해야함.
2. fromCallable
- Callable은 Generic으로 받은, 오브젝트 타입으로 value를 return 해주는, Thread에 전달할 작업
- Callable과 Runnable의 공통/차이
공통: 비슷하게, 다른 쓰레드에 의해서 실행되어질 수 있는 클래스 객체를 위한 인터페이스.
차이: 그러나 Callable은 (Runnable처럼 바로 Thread에 인자로 전달할 수 없고) ThreadPool을 사용해서 전달함.
또한 Runnable은 return값이 없고 Exception을 낼 수 없으나, Callable은 return이 존재하고, Exception을 낼 수 있음.
+
1. Observable 세부 사항
RxJava의 Observable은 세가지의 알림을 구독자에게 전달
-
onNext : Observable이 데이터의 발행을 알린다. 기존의 옵서버 패턴과 같음.
- onComplete : 모든 데이터의 발행을 완료했음을 알린다. onComplete이벤트는 단 한번만 발생하며, 발생한 후에는 더 이상 onNext 이벤트가 발생해선 안 된다.
- onError : 에러 발생을 알림. onError 이벤트가 발생하면 이후에 onNext 및 onComplete 이벤트가 발생하지 않는다. 즉, Observable의 실행을 종료.
2. Disposable 객체
-
void dispose() / boolean isDisposed() => 2개 함수만 존재
-
dispose()
-
Observable에게 더 이상 데이터를 발행하지 않도록 구독을 해지하는 함수
-
Observable이 onComplete 알림을 보냈을 때, 자동으로 dispose()를 호출해
Observable과 구독자의 관계를 끊는다. => 따로 dispose() 호출 X
-
-
isDisposed()
-
Observable이 데이터를 발행하지 않는지 (구독을 해지했는지) 확인하는 함수
-
구독을 해지했으면 -> true
-
https://www.youtube.com/watch?v=_MI5X0jrfIo
Reference
https://dev-daddy.tistory.com/26
https://developer88.tistory.com/86
https://developer88.tistory.com/87
https://javaexpert.tistory.com/794
'Dev > Java' 카테고리의 다른 글
[Java] Java SE, EE, ME, FX의 차이 (0) | 2019.10.16 |
---|---|
[Java] Calendar 객체 사용시 'set' not working (0) | 2019.09.19 |
[Java] Singleton Pattern 사용시 (0) | 2018.10.02 |