[java] RxJava의 Subscription 인터페이스
RxJava은 이벤트 기반 프로그래밍을 위한 자바 라이브러리로, 비동기적인 작업을 처리하고 관련 이벤트를 처리하기 위한 풍부한 기능을 제공합니다. Subscription
은 RxJava에서 매우 중요한 개념 중 하나로, Observer 패턴에서 관찰자가 이벤트를 구독하기 위해 사용되는 인터페이스입니다.
Subscription 인터페이스의 역할
Subscription
인터페이스는 다음과 같은 역할을 수행합니다:
-
구독 컨트롤:
Subscription
인터페이스는unsubscribe()
메서드를 제공하여 구독을 취소하는 기능을 제공합니다. 이는 메모리 누수를 방지하고 불필요한 이벤트 처리를 방지하는 데 도움이 됩니다. -
배압 제어: 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
인터페이스를 사용하여 구독을 취소할 수 있습니다.