[java] RxJava에서의 이벤트 핸들링

RxJava는 자바 개발자들에게 반응형 프로그래밍을 위한 강력한 도구를 제공합니다. 이벤트 핸들링은 RxJava에서 매우 중요한 부분이며, 이를 효과적으로 다루기 위해 몇 가지 패턴과 연산자를 사용할 수 있습니다.

Observable과 Subscriber

RxJava에서 이벤트를 발생시키는 주체는 Observable입니다. Observable은 데이터의 흐름을 나타내며, 이벤트를 생성하고 이벤트 스트림을 관리합니다. 이벤트를 받는 주체는 Subscriber입니다. SubscriberObservable에서 발생한 이벤트를 처리하고 결과를 받아옵니다.

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

Subscriber<String> subscriber = new Subscriber<String>() {
    @Override
    public void onNext(String message) {
        System.out.println(message);
    }

    @Override
    public void onError(Throwable e) {
        e.printStackTrace();
    }

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

observable.subscribe(subscriber);

위의 예시에서는 “Hello, RxJava!”라는 메시지를 Observable에게서 생성하고, Subscriber가 이 메시지를 받아 출력합니다. SubscriberonNext() 메소드를 통해 이벤트 처리를 합니다. onError() 메소드는 에러 발생 시 호출되며, onComplete() 메소드는 이벤트 스트림의 완료를 의미합니다.

연산자 활용

RxJava는 다양한 연산자를 제공하여 이벤트 스트림을 조작하고 변형하는 것을 도와줍니다.

filter 연산자

filter 연산자를 사용하면 조건에 맞는 이벤트만을 걸러낼 수 있습니다.

observable
    .filter(message -> message.startsWith("Hello"))
    .subscribe(subscriber);

위의 예시에서는 이벤트 스트림 중 맨 처음으로 “Hello”로 시작하는 이벤트만을 출력합니다.

map 연산자

map 연산자를 사용하면 이벤트를 다른 형태로 변환할 수 있습니다.

observable
    .map(message -> message.toUpperCase())
    .subscribe(subscriber);

위의 예시에서는 이벤트 스트림의 모든 메시지를 대문자로 변환한 후 출력합니다.

flatMap 연산자

flatMap 연산자를 사용하면 하나의 이벤트를 여러 개의 이벤트로 분리할 수 있습니다.

observable
    .flatMap(message -> {
        String[] words = message.split(" ");
        return Observable.fromArray(words);
    })
    .subscribe(subscriber);

위의 예시에서는 이벤트 스트림의 메시지를 공백을 기준으로 분리한 후, 각 단어를 개별적인 이벤트로 취급하여 출력합니다.

이외에도 RxJava는 다양한 연산자들을 제공하며, 이를 조합하여 복잡한 이벤트 처리 로직을 작성할 수 있습니다.

결론

이벤트 핸들링은 RxJava에서 매우 중요하며, ObservableSubscriber를 통해 이를 다룰 수 있습니다. 연산자를 활용하여 이벤트 스트림을 조작하고 변형할 수 있으며, 적절한 연산자를 선택하여 원하는 동작을 구현할 수 있습니다.

RxJava는 반응형 프로그래밍을 편리하게 지원해주는 도구이므로, 이벤트 핸들링을 효과적으로 다룰 수 있다면 개발 생산성을 크게 향상시킬 수 있습니다.

참고 자료