본문 바로가기

프로그래밍/RxJava

[RxJava] Observable - fromCallable() 함수

RxJava비동기 프로그래밍을 위한 라이브러리이다.

지금까지는 기본적인 자료구조로 Observable을 생성하는 부분을 살펴봤다면,

이번에는 기존 자바에서 제공하는 비동기 클래스인터페이스와의 연동을 살펴볼 차례이다.

 

먼저 살펴보는 것은 자바 5에서 추가된 동시성 API인 Callable 인터페이스이다.

이 인터페이스는 비동기 실행을 한 후 반환하는 call() 메서드를 정의하고 있다.

 

run() 메서드가 있는 Runnable 인터페이스처럼 메서드가 하나고, 인자가 없다는 점에서 비슷하지만

실행결과를 리턴한다는 점에서 차이가 있다.

 

또한 Executor 인터페이스의 인자로 활용되기 때문에 잠재적으로 다른 스레드에서 실행되는 것을 의미하기도 한다.

 

먼저 Callable 객체fromCallable() 함수를 이용하여 Observable을 만드는 방법이다.

private void basic(){
        Callable<String> callable = () -> {
          Thread.sleep(1000);
          return "Hello Callable";
        };

        Observable<String> source = Observable.fromCallable(callable);
        source.subscribe(System.out::println);
    }
결과값
Hello Callable

위의 코드에서 callable 변수는 람다 표현식을 활용했다.

call() 함수는 인자가 없으므로, () -> {}로 나타내서 코드 가독성을 높였다.

람다 표현식 내용에서는 sleep() 함수를 호출하여 1초간 쉬었다가 "Hello Callable"이라는 문자열을 반환하고 있다.

 

만약에 람다식을 사용하지 않을 경우에는 아래와 같은 코드가 된다.

private void withoutLambda(){
        Callable<String> callable = new Callable<String>() {
            @Override
            public String call() throws Exception {
                Thread.sleep(1000);
                return "Hello Callable";
            }
        };

        Observable<String> source = Observable.fromCallable(callable);
        source.subscribe(System.out::println);
    }

 

fromCallable() 함수 전체 코드 보러가기