[java] RxJava의 Observable 클래스

RxJava는 Reactive Extensions 라이브러리의 자바 구현체로, 비동기 프로그래밍 및 이벤트 기반 프로그래밍을 위한 도구입니다. RxJava의 핵심 요소 중 하나는 Observable 클래스입니다.

Observable 클래스란?

Observable 클래스는 이벤트 스트림을 생성하고, 이벤트를 발행하고, 이벤트를 구독하는 기능을 제공합니다. 이 클래스는 말 그대로 ‘변화하는 상태’를 나타내며, 이벤트를 발생시키는 주체입니다.

Observable 클래스는 다양한 생성 방법을 제공하여, 다양한 데이터 소스에서 이벤트 스트림을 생성할 수 있습니다. 예를 들어, just(), from(), range() 등의 메소드를 사용하여 Observable을 생성할 수 있습니다.

Observable<String> observable = Observable.just("Hello", "World");

Observable<Integer> observable2 = Observable.fromArray(1, 2, 3, 4, 5);

Observable<String> observable3 = Observable.range(1, 10)
        .map(number -> "Number: " + number);

이벤트 발행과 구독

Observable 클래스의 가장 중요한 기능은 이벤트를 발생시키는 것입니다. Observable은 subscribe() 메소드를 사용하여 이벤트를 구독할 수 있습니다.

observable.subscribe(
    value -> System.out.println(value), // 이벤트 수신 시 실행할 동작
    error -> System.err.println(error), // 에러 발생 시 실행할 동작
    () -> System.out.println("Complete") // 이벤트 스트림 종료 시 실행할 동작
);

위의 예제에서는 각각의 이벤트를 받았을 때 수행할 동작을 람다 표현식으로 정의하고 있습니다. 또한, 에러 발생 시와 이벤트 스트림이 종료될 때의 동작도 정의할 수 있습니다.

스트림 변환과 합성

Observable 클래스는 이벤트 스트림을 변환하거나 합성하는 기능을 제공합니다. 이를 통해 다양한 연산을 적용할 수 있습니다. 예를 들어, map(), filter(), flatMap() 등의 메소드를 사용하여 이벤트 스트림을 변환하거나, merge(), concat() 등의 메소드를 사용하여 이벤트 스트림을 합성할 수 있습니다.

observable.map(value -> value.toUpperCase())
         .subscribe(result -> System.out.println(result));

Observable<Integer> observable2 = Observable.range(1, 5);
Observable<Integer> observable3 = Observable.range(6, 5);

Observable.merge(observable2, observable3)
          .subscribe(result -> System.out.println(result));

위의 예제에서는 첫 번째 Observable에서 발행된 문자열을 대문자로 변환하여 출력하고, 두 번째와 세 번째 Observable을 합성하여 출력하고 있습니다.

결론

RxJava의 Observable 클래스는 비동기 프로그래밍 및 이벤트 기반 프로그래밍을 위한 핵심 클래스입니다. 이 클래스를 사용하면 데이터 소스에서 이벤트 스트림을 생성하고, 이벤트를 발행하며, 이벤트를 구독하는 일련의 작업을 수행할 수 있습니다. Observable 클래스의 다양한 기능을 활용하여 효율적이고 간결한 코드를 작성할 수 있습니다.


참고 자료: