[java] RxJava의 스레드 처리

RxJava은 자바에서 리액티브 프로그래밍을 구현하는 데 사용되는 강력한 라이브러리입니다. 하지만 때로는 RxJava에서 처리하는 작업이 스레드에서 실행되어야 할 때가 있습니다. 이 글에서는 RxJava에서 스레드 처리를 위한 방법을 알아보겠습니다.

스케줄러(Scheduler)

RxJava는 스케줄러(Scheduler)를 통해 작업을 특정 스레드로 보낼 수 있습니다. 다양한 스케줄러를 제공하기 때문에, 작업을 어떤 스레드에서 실행할지 선택할 수 있습니다.

예를 들어, observeOn() 메서드는 이후에 발생하는 작업이 실행될 스케줄러를 지정합니다. 다음은 observeOn() 메서드를 사용하여 작업을 메인 스레드로 보내는 예제입니다.

Observable.just("Hello, RxJava!")
    .observeOn(AndroidSchedulers.mainThread())
    .subscribeOn(Schedulers.io())
    .subscribe(result -> {
        // 작업 결과 처리
    });

위 예제에서 observeOn(AndroidSchedulers.mainThread())는 작업의 결과를 메인 스레드에서 받도록 설정합니다. subscribeOn(Schedulers.io())는 작업을 백그라운드의 I/O 스레드에서 실행하도록 지정합니다.

단일 스레드

만약 작업을 단일 스레드에서 실행하고 싶을 경우, 스케줄러 팩토리 메서드인 Schedulers.single()을 사용할 수 있습니다.

Observable.just("Hello, RxJava!")
    .observeOn(Schedulers.single())
    .subscribe(result -> {
        // 작업 결과 처리
    });

위의 예제에서 observeOn(Schedulers.single())를 사용하여 작업을 단일 스레드에서 실행할 수 있습니다.

커스텀 스케줄러

RxJava는 기본적으로 여러 개의 스케줄러를 제공하지만, 필요한 경우 커스텀 스케줄러를 생성하여 사용할 수도 있습니다. Schedulers.from(Executor) 메서드를 사용하여 커스텀 스케줄러를 생성할 수 있습니다.

Executor executor = Executors.newFixedThreadPool(5);
Scheduler customScheduler = Schedulers.from(executor);

Observable.just("Hello, RxJava!")
    .observeOn(customScheduler)
    .subscribe(result -> {
        // 작업 결과 처리
    });

위의 예제에서는 Executors.newFixedThreadPool(5)를 사용하여 크기가 5인 고정 스레드 풀을 생성하고, Schedulers.from(executor)를 사용하여 해당 스레드 풀을 기반으로 한 커스텀 스케줄러를 생성합니다.

정리

RxJava에서 스레드 처리를 위해 스케줄러를 사용할 수 있습니다. observeOn()을 사용하여 작업이 실행될 스레드를 지정하고, subscribeOn()을 사용하여 작업이 시작되는 스레드를 지정할 수 있습니다. 또한, Schedulers.single()을 사용하여 단일 스레드에서 작업을 실행할 수도 있으며, Schedulers.from(Executor)를 사용하여 커스텀 스케줄러를 생성할 수도 있습니다.

더 자세한 내용은 RxJava 문서를 참조하시기 바랍니다.