RxKotlin, RxAndroid을 알아보기전에 먼저 알아볼것이 있다.
바로 Reactive Programing 이다.
컴퓨터 프로그램에는 세가지 종류가 있다.
즉, 근래에 떠오르고 있는 Reactive Programing는 데이터의 흐름과 전달에 관한 프로그래밍 패러다임이라고 볼 수 있다.
개발자들은 사용자 경험(UX)을 향상시키고 싶어한다. 사용자 경험(UX)이 좋은 앱을 만든다는것은 반응형 앱을 개발하고 싶은 것 이다.
그래서 앱에서 메인스레드가 멈추거나 느려지지 않도록 해야하며 사용자들에게 부드러운 사용자 경험(UX)과 좋은 앱 성능을 제공하고 싶어 한다.
하지만 메인 스레드를 자유롭게 핸들링 하면서 유지하려면 무겁고 시간이 오래 걸리는 작업은 백그라운드에서 해야 한다. 그리고 백그라운드에서 조차 무겁고 복잡한 계산 작업이라면 서버에서 수행 하는 것이 Best 이다. 그렇기 때문에 네트워크 운영을 위한 비동기 작업이 필요하다.
맞다.
하지만 2019년 11월 8일 개발자 Charles Munger에 의해 공식적으로 AsyncTask Deprecated되었습니다. 즉, 다른 비동기 처리 라이브러리를 써야한다는 것이죠.그렇다면 왜 이런 상황이 되었나 하고 AsyncTask를 자세히 살펴볼 필요가 있다.
AsyncTask는 전체적인 프로세스를 단순화 하지만 안드로이드의 생명주기를 신경쓰지 않다. 그렇기 때문에 액티비티나 프레그먼트가 안드로이드 생명주기에 의해 재생성되거나 파괴되었을 때 마무리 작업에 대한 내용이 보호되지 않는 불편한 점이 있다.
ReactiveX는 비동기 프로그래밍과 Observable 시퀀스를 이용해 이벤트를 처리하기위한 라이브러리
현재 많은 리액티브 관련 라이브러리가 나와 있는데 대부분 ReactiveX를 사용하기 때문에 RxKotlin, RxJava, RxAndroid, RxSwift 등들은 서로 다른 것이 아니라 하나의 ReactiveX Extensions이라고 보면 된다.
간단히 정리하면 아래와 같다.
위의 ReactiveX Extensions에는 공통점이 있다.
RxJava 자바와 안드로이드 뿐만 아니라 서버까지 다루는 오픈소스 라이브러리이다.
리액티브 프로그래밍이란, 데이터나 이벤트 변화와 반응에 초점을 맞춘 프로그래밍을 뜻하는 일반적인 용어
엄밀히 말하면 FRP( fucntional reative programming ) 은 RxJava와 다르다. FRP는 연속적인 시간의 흐름을 포함하고 RxJava는 시간에 대해 불연속적인 이벤트만 다룬다.
동시성과 병렬성을 해결하는 프로그래밍으로 리액티브나 비동기 요구사항을 명령형 방식으로 만들었을 때 나타나는 콜백 지옥 문제를 해결하는 것이다.
즉 RxJava 를 이용한 리액티브 프로그래밍은 명령형 방식을 이용하지 않고 선언적 접근을 사용한다.
데이터나 이벤트 스트림을 나타내는 Observable 타입으로 push / reactive 방식을 선호
즉시동작이 아닌 지연실행 가능하고 비동기와 동기 방식 모두 사용가능하고 시간에 따라 많은 이벤트를 다룰 수 있다.
RxJava 가 리액티브이기 위한 핵심은 밀어내기 인데 Observable과 Observer 타입 시그니처가 이를 지원한다.
밀어내기를 지원하기 위해서는 Observable / Observer 쌍을 subscribe로 연결
Observer는 구독을 통해 3가지 유형의 이벤트를 받는다.
interface Observer<T>{
void onNext( T t )
void onError( Throwalbe t )
void onComplete()
}