RxJava란?
- RxAndroid는 RxJava에 안드로이드용 스케쥴러 등 몇 가지 클래스를 추가해 안드로이드 개발을 쉽게 해주는 라이브러리
- RxJava는 Reactive X(Reactive Extensions)를 Java로 구현한 라이브러리
- RxJava, RxAndroid는 반응형 프로그래밍(Reactive Programming)을 하기위해 만들어짐
Reactive Programming
- 주변 환경과 끊임없이 상호 작용을 하는 프로그래밍
- 데이터 흐름을 먼저 정의하고 데이터가 변경되었을때 연관되는 함수나 수식이 업데이트되는 방식 (예: 엑셀 - cell에 값을 넣거나 혹은 다른 cell을 조합해서 원하는 값을 계산 / 기존 : a = b + c 연산 후 b, c의 값이 변해도 a에 영향 X, 리액티브 : a = b + c 연산 후 b, c의 값이 변하면 a의 값은 자동으로 업데이트)
- 시간 순으로 들어오는 모든 데이터의 흐름을 스트림(Stream)으로 처리 (하나의 데이터 흐름은 다른 데이터 흐름으로 변형, 여러 데이터 흐름이 하나의 데이터 흐름으로 변경 가능)
RxJava의 장점
- 동시성 문제, 다중 이벤트 처리, 백그라운드 처리 등의 문제를 쉽게 해결 가능
- 안드로이드 개발의 경우 UI를 변경할 수 있는 것은 메인 쓰레드 뿐이기 때문에 비동기 처리를 해야하는 일이 생김 → Rx를 이용하면 이런 작업들을 쉽게 할 수 있음, 새로운 프로세스가 추가되거나 삭제되어야 한다면 로직의 큰 변경 없이 간단히 수정 가능
Rx의 구성
Rx = Observable + Observers + Schedulers
- Observable : 데이터 스트림. 하나의 스레드에서 다른 스레드로 전달 할 데이터를 압축, 주기적으로 또는 설정에 따라 생애주기동안 한번만 데이터 방출(요약 : 데이터를 처리하고 다른 구성요소에 전달하는 역할)
- Observers : Observable에 의해 방출된 데이터 스트림 소비, subscribeOn() 메서드를 사용해서 Observable을 구독하고 Observable이 방출하는 데이터를 수신 가능
- Schedulers : Observable과 Observers에게 그들이 실행되어야 할 스레드를 알려줌, observeOn() 메서드로 observers에게 관찰해야 할 스레드를 알려줌, scheduleOn() 메서드로 observable이 실행해야 할 스레드 알려줌