티스토리 뷰

ReactiveX

  • ReactiveX는 효율적이고 직관적인 비동기 프로그래밍을 지원하기 위해 개발된 라이브러리이다. 다중 언어를 지원하여 다양한 언어에서 거의 유사한 문법으로 비동기 코드를 유연하게 작성할 수 있다. Java 언어에는 RxJava라는 이름으로 라이브러리를 제공한다.
  • Java 진영에는 비동기 프로그래밍을 가능하게 해주는 Future 인터페이스가 제공되지만 RxJava는 훨씬 유연하고 사람이 읽기 쉬운 문법을 제공한다.

라이브러리 종속성 추가

  • 프로젝트 루트의 /build.gralde 파일에 아래 내용을 추가한다.
dependencies {
    compile group: 'io.reactivex.rxjava2', name: 'rxjava', version: '2.1.9'
}

Observable

  • 아래는 RxJava가 제공하는 대표적인 모델인 Observable의 사용 예이다.
Observable
    .just("Hello", "World")
    .subscribeOn(Schedulers.io())
    .map(word -> word.toUpperCase())
    .repeat()
    .subscribe(word -> {
        log.info(word);
    });
  • just() 메써드에는 비동기 처리할 출발점이 되는 원천 데이터를 명시한다.
  • Observable 모델은 기본적으로 단일한 흐름의 싱글 쓰레드로 작동한다. 멀티 쓰레드로 작동시키려면 .subscribeOn() 메써드로 멀티 쓰레드를 처리할 스케쥴러를 지정해줘야 한다. Schedulers.io()CPU의 부하가 크지 않으면서 IO 블로킹이 발생하는 작업(주로 파일 또는 네트워크 작업)에 적합하다. 쓰레드 풀에 의해 작업에 필요한 만큼 알아서 쓰레드를 생성한다. 이 경우 작업을 처리할 쓰레드의 이름은 readScheduler-{thread_number}가 된다.
  • map() 메써드는 데이터를 가공하는 역할을 한다. 위 예제에서는 원천 데이터를 모두 대문자로 가공되도록 작성했다.
  • repeat() 메써드를 이용하면 동일한 작업을 무한으로 반복할 수 있다.
  • subscribe() 메써드에는 최종적으로 가공된 데이터를 소비할 행위를 작성한다. 작성된 행위는 앞서 지정한 쓰레드에 의해 실행된다. 위 예제에서는 최종 가공된 문자열을 로그로 출력한다.
HELLO
WORLD
HELLO
WORLD
HELLO
WORLD
...

참고 글

댓글
댓글쓰기 폼