[java] RxJava의 Subscription 인터페이스

RxJava은 이벤트 기반 프로그래밍을 위한 자바 라이브러리로, 비동기적인 작업을 처리하고 관련 이벤트를 처리하기 위한 풍부한 기능을 제공합니다. Subscription은 RxJava에서 매우 중요한 개념 중 하나로, Observer 패턴에서 관찰자가 이벤트를 구독하기 위해 사용되는 인터페이스입니다.

Subscription 인터페이스의 역할

Subscription 인터페이스는 다음과 같은 역할을 수행합니다:

  1. 구독 컨트롤: Subscription 인터페이스는 unsubscribe() 메서드를 제공하여 구독을 취소하는 기능을 제공합니다. 이는 메모리 누수를 방지하고 불필요한 이벤트 처리를 방지하는 데 도움이 됩니다.

  2. 배압 제어: RxJava는 기본적으로 이벤트를 비동기적으로 처리하며, 이는 이벤트의 발생과 처리의 속도가 다를 수 있음을 의미합니다. 이러한 상황에서 Subscription 인터페이스는 구독자에게 이벤트를 발행하는 속도를 조절하는 기능을 제공합니다. 구독자는 request(long n) 메서드를 사용하여 한 번에 처리할 이벤트의 개수를 지정할 수 있습니다.

예제 코드

import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public class SubscriptionExample {
    public static void main(String[] args) {
        Observable<String> observable = Observable.just("Hello", "World", "!");

        Observer<String> observer = new Observer<String>() {
            private Disposable disposable;

            @Override
            public void onSubscribe(Disposable d) {
                disposable = d;
            }

            @Override
            public void onNext(String s) {
                System.out.println(s);
            }

            @Override
            public void onError(Throwable e) {
                System.out.println("Error: " + e.getMessage());
            }

            @Override
            public void onComplete() {
                System.out.println("Completed");
            }
        };

        Disposable subscription = observable.subscribe(observer);

        // 구독 취소
        subscription.dispose();
    }
}

위의 예제 코드에서는 Observable이 “Hello”, “World”, “!”와 같은 문자열을 방출하고, 이를 Observer가 구독하여 출력하는 간단한 예제입니다. Disposable 인터페이스를 사용하여 구독을 취소할 수 있습니다.

참고 자료