이번 포스팅에는 RxJava에 대한 이야기를 하려고 한다.
팀 프로젝트로 어플을 만드는 과정에서 Azure Face API를 사용하게 되었고 오픈소스를 찾으면서 하다 보니 비동기 AsyncTask를 사용하였는데, RxJava로 대처하게 되면서 RxJava에 공부를 하게 되었다.
RxJava란
RX는 Reactive eXtension의 약자로, Micorsoft가 .NET에서 사용하기 위해 만든 Open Source Library입니다.
그리고 2013년 2월 넷플릭스에서 처음 소개되었고, 2016년 10월 RxJava2를 발표하였으며 가장 최근에 2020년 2월에 RxJava3을 배포되었다.
Rx공식문서에 따르면 ReactiveX는,
ReactiveX is a library for composing asynchronous and event-based programs by using observable sequences.
It extends the observer pattern to support sequences of data and/or events and adds operators that
allow you to compose sequences together declaratively while abstracting away concerns about things
like low-level threading, synchronization, thread-safety, concurrent data structures, and non-blocking I/O.
간단히 요약하자면,
- RX는 관찰 가능한 시퀀스를 사용하여 비동기 및 이벤트 기반 프로그램을 구성하기 위한 라이브러리이다.
- Observer Pattern 을 확장하여 Sequence를 지원합니다.
- 낮은 수준의 스레딩, 동기화. 스레드 안정성, 동시 데이터 구조, Non-blocking I/O에 대한 우려를 줄여준다.
RxJava 예제
AndroidStudio에서 RxJava를 사용하려면 일단 Build.gradle(Module:StudyCode.app) > dependencies 에 아래 문장을 추가해야 한다.
//RxJava3
dependencies {
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'io.reactivex.rxjava3:rxjava:3.0.7'
}
이제 MainActivity에 다음의 코드를 추가해보자.
protected void onCreate(Bundle savedInstanceState) {
//
TextView textView = findViewById(R.id.textView);
Observable.just(textView.getText().toString())
.map(x -> x + " 여러분")
.subscribe(text -> textView.setText(text));
}
}
그러면 textView에는 "안녕하세요"에서 "안녕하세요 여러분"으로 변경되는 것을 확인할 수 있다.
AsyncTask > RxJava로 대처하는 방법
Rxjava의 backgroundTask를 이용하는 방법은 아래와 같다.
Disposable backgroundtask;
//backgroundtask를 실행하는 메소드입니다.
private void BackgroundTask(String URLs) {
//onPreExecute(task 시작 전에 실행할 코드 여기에 작성)
backgroundtask = Observable.fromCallable(() -> {
//doInBackground (task에서 실행할 코드 여기에 작성)
return result;
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe((result) -> {
//onPostExecute (task 끝난 후에 실행할 코드 여기에 작성)
backgroundtask.dispose();
});
}
아래 표는, AsyncTask와 RxJava의 1 : 1 코드이다. 완벽하게 맞지는 않지만 그래도 알아두면 유용할 것이다.
AsyncTask | RxJava |
excute() | subscribe() |
doInBackGround() | onSubscribe() |
onPostExecuted() | observer() |
마치며
AsyncTask, RxJava 둘 다 처음 사용하는 코드라서 아직까지는 어느 게 편하고 이런 느낌을 못 받았다. 하지만 AsyncTask는 deprecated 되었으니 앞으로는 RxJava만을 사용하면서 좀 더 다양한 활용을 해봐야겠다. 그리고 코드를 사용하다가 코드가 사라지고, 앞으로도 배워야 할 코드가 많을 것 같다. RxJava도 처음에는 너무 어렵게 느껴졌지만, 차근차근 공부하다 보면 언젠가는 완벽하게 나의 것으로 만들 수 있다고 생각한다. 부족하지만 차근차근 앞으로 나아가는 개발자가 되어야겠다.
출처
https://reactivex.io/intro.html
'Android' 카테고리의 다른 글
[Android] 안드로이드 난독화 및 최적화하기 (0) | 2023.12.14 |
---|---|
[Android] 안드로이드 스튜디오에서 릴리즈 버전 테스트하기 (0) | 2023.12.13 |
[Android] collectAsState()와 collectAsStateWithLifecycle() 차이점 (0) | 2023.11.09 |
AsyncTask 정지...(deprecated) (0) | 2022.03.08 |
MVVM패턴 (0) | 2022.03.07 |