https://github.com/ReactiveX/RxJava
https://reactivex.io/documentation/operators
- RxJava 는 ReactiveX(Reactive Extensions)를 Java로 구현한 라이브러리이다.
- ReactiveX 는 관찰 가능한(Observable) 스트림을 사용하는 비동기 프로그래밍을 위한 API이다.
(공홈 헤드 문구이다. - An API for asynchronous programming with observable streams.) - Reactive Programming 은 데이터 흐름과 변화의 전파와 관련있는 선언적 프로그래밍 패러다임이다.
(위키백과 출처라 그런지 설명이 너무 어렵다. - Reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change)
RxJava도, 상위 개념들도 모두 한 문장으로 정의내리기엔 개념이 어렵다. 반응형 프로그래밍이란 대체 무엇이길래 ReactiveX와 RxJava, RxAndroid 등을 만드는 배경이 되었을까.
반응형 프로그래밍(Reactive Programming) 를 다시 말해보면 주변 환경과 끊임없이 상호 작용을 하는 프로그래밍 을 의미한다. 환경이 변화면 이벤트를 받아 동작하도록 만드는 프로그래밍 기법이다. 그럼 기존에는 주변 환경과 상호 작용을 하지 않았을까? 여기 간단한 예시가 있다.
기존의 명령형 프로그래밍에서는 a=b+c 에서 a는 b+c의 연산이 끝난 이후에 그 결과를 통해 값이 할당될 것이다. 만약 이후에 b나 c의 값이 변하더라도 a에는 영향을 주지 않기 때문에 문제가 생길 수 있다. 반면 리액티브 프로그래밍에서는 b나 c의 값이 변동되더라도 b+c 연산을 다시 할 필요 없이 자동으로 업데이트된다.
이제 반응형 프로그래밍에서는 데이터가 변하면 알아서 캐치해서 반영한다는 것은 알겠다. 하지만 구체적으로 어떻게 돌아가는 것인지 궁금해진다. 이에 대한 궁금증을 풀기 위해 명령형 프로그래밍 방식과의 차이를 조금 더 딮하게 비교해보자.
그래서, RxJava는?
다시 읽어보면 ‘관찰 가능한’ 스트림을 사용한다는 이야기가 조금은 이해가 간다. RxJava는 개발자들이 직면하는 문제들- 예를 들어 동시성 문제, 다중 이벤트 처리, 백그라운드 처리 등의 문제를 아름답게 해결할 수 있도록 도와준다. 안드로이드 개발의 경우 화면(UI)을 변경할 수 있는 것은 메인 쓰레드 뿐이기 때문에 비동기 처리를 하는 일이 빈번하다. Rx를 이용하면, 어렵고 실패 확률이 높았던 이런 작업들을 쉽게 할 수 있다. 또, 새로운 프로세스가 추가되어거나 삭제되어야 한다면 로직의 큰 변경 없이 간단히 수정할 수 있다.
안드로이드 프로젝트에 Rx 적용하기
안드로이드에 RxJava를 적용하려면 build.gradle에 추가해주어야 한다. 2020년 10월 11일 기준 RxAndroid는 3.0.0, RxJava는 3.0.7 버전이 최신 버전이다.
https://github.com/ReactiveX/RxJava
dependencies {
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'io.reactivex.rxjava3:rxjava:3.0.7'
}
https://blog.yena.io/studynote/2020/10/11/Android-RxJava(1).html
반드시 읽어볼것