Android : RxJava에 대하여

hjseo-dev·2022년 1월 3일
1

Android

목록 보기
5/18

RxJava란?

  • RxAndroid 는 RxJava에 안드로이드용 스케쥴러 등 몇 가지 클래스를 추가해 안드로이드 개발을 쉽게 해주는 라이브러리이다.
  • RxJava 는 ReactiveX(Reactive Extensions)를 Java로 구현한 라이브러리

Rxjava는 반응형 프로그래밍이다. 반응형이란 데이터가 변하면 알아서 캐치하여 결과로 반영된다. 따라서 데이터를 관찰할 수 있고 데이터를 스트림으로 처리한다.


RX = Observable + Observers + Schedulers

  • Observable: Observable은 데이터 스트림입니다. Observable은 하나의 스레드에서 다른 스레드로 전달 할 데이터를 압축합니다. 주기적으로 또는 설정에 따라 생애주기동안 한번만 데이터를 방출합니다. Observable은 데이터를 처리하고 다른 구성요소에 전달하는 역할을 한다고 생각하면 됩니다.
  • Observers: Observers는 Observable에 의해 방출된 데이터 스트림을 소비합니다. Observers는 subscribeOn() 메서드를 사용해서 Observable을 구독하고 Observable이 방출하는 데이터를 수신할 수 있다.
  • Schedulers: Schedulers 는 Observable과 Observers 에게 그들이 실행되어야 할 스레드를 알려줍니다. observeOn() 메서드로 observers에게 관찰해야 할 스레드를 알려줄 수 있다. 또한, scheduleOn() 메서드로 observable이 실행해야 할 스레드를 알려줄 수 있다.

RxJava 예제

  1. 먼저 아래의 라이브러리를 설치해준다.
dependencies {
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
    implementation 'io.reactivex.rxjava3:rxjava:3.0.7'
}
  1. Observer를 만든다.
  • observer에는 세가지 함수를 통해 데이터 흐름을 처리한다.
    1) onNext() : 하나의 소스 Observable에서 Observer까지 한 번에 하나씩 순차적으로 데이터를 발행함
    2) onComplete() : 데이터 발행이 끝났음을 알리는 완료 이벤트를 Observer에 전달하여 onNext()를 더 호출하지 않음을 나타냄
    3) onError() : 오류가 발생했음을 Observer에 전달함
Observer<Integer> observer = new Observer<Integer>() {

    @Override
    public void onCompleted() {
        System.out.println("All data emitted.");
    }
    
    @Override
    public void onError(Throwable e) {
        System.out.println("Error received: " + e.getMessage());
    }
    
    @Override
    public void onNext(Integer integer) {
        System.out.println("New data received: " + integer);
    }
};
  1. Scheduler 처리하기
  • scheduler는 동시성을 관리함. Scheduler에는 스레드 관리를 제어하는 두 개의 메서드가 있다.
    1) subscribeOn() : observable이 어느 스레드에서 동작할 것인지 정의할 수 있음
    2) observeOn() : observer가 어느 스레드에서 동작할 것인지 정의할 수 있음
Subscription subscription = observable 
    .subscribeOn(Schedulers.io()) // observable을 IO 스레드에서 실행
    .observeOn(AndroidSchedulers.mainThread()) // Observer 메인 스레드에서 실행
    .subscribe(observer); // observer 구독


subscription.unsubscribe(); // 구독 취소

참고 : https://soohyun6879.tistory.com/123
https://blog.yena.io/studynote/2020/10/11/Android-RxJava(1).html

0개의 댓글