이번 글에선, rx에 대한 사용, 활용 등이 아닌 왜 rx일까?
왜 우리가 rx를 써야할까?에 대해서 써보고자.
사용자 경험 향상을 위해서.
비동기 라이브러리를 위한 평가 매트릭스로 아래 4가지
즉, 하나의 컴포넌트로부터 전파가 되며 '데이터 변화 수신자'로 등록된 다른 컴포넌트에게 변화를 전파한다.
Rx = Observable + Observer + Schedulers`
Observable
데이터 스트림. 하나의 스레드에서 다른 스레드로 전달할 데이터를 압축한다.
주기적으로 또는 설정에 따라 생애 주기 동안 한 번만 데이터를 방출한다.
쉽게 생각하면 공급자 이다. 데이터를 처리하고 다른 구성 요소에 전달한다.
Observer
Observable에 의해 방출된 데이터 스트림을 소비한다.
SubscribeOn() 메서드를 사용해서 observable을 구독하고 observable이 방출하는 데이터를 수신한다.
Observable이 데이터를 방출할 때마다 등록된 모든 Observer는 onNext() 콜백으로 데이터를 수신한다.
JSON 응답 파싱이나 UI 업데이트와 같은 작업을 수행한다.
Schedulers
Rx는 비동기 프로그래밍을 위한 것이고 그렇기에 우린 스레드 관리가 필요하다.
Schedulers는 Observable과 Observer에게 실행되어야 할 스레드를 알려주는 구성요소이다.
observeOn()에서 Observers에게 관찰해야 할 스레드를 알려줄 수 있다.
scheduleOn() 메서드로 observable이 실행해야 할 스레드를 알려줄 수 있다.
Schedulers.io()는 IO 스레드에서 코드를 실행한다.
아래와 같이 구성할 수 있다.
database.subscribeOn(Schedulers.newThread()) //Observable runs on new background thread.
.observeOn(AndroidSchedulers.mainThread()) //Observer will run on main UI thread.
.subscribe(observer); //Subscribe the observer
subscribeOn(Schedulers.newThread())
: database observable에게 백그라운드에서 실행 하라고 말한다.
observeOn(AndroidSchedulers.mainThread())
: observer에게 메인 스레드에서 실행하라고 말한다.