[java] RxJava를 이용한 이벤트 버스 구현

이벤트 버스는 애플리케이션의 다른 구성 요소 간에 효율적인 통신을 위해 사용되는 패턴입니다. Java에서 이벤트 버스를 구현하기 위해 RxJava를 사용할 수 있습니다. RxJava는 이벤트 기반 프로그래밍을 지원하며, 리액티브 스트림을 사용하여 이벤트를 전달하고 구독하는 기능을 제공합니다.

RxJava 설정

먼저, 프로젝트에 RxJava를 추가해야 합니다. Maven의 경우, pom.xml 파일에 다음 의존성을 추가합니다:

<dependency>
    <groupId>io.reactivex.rxjava3</groupId>
    <artifactId>rxjava</artifactId>
    <version>3.0.0</version>
</dependency>

Gradle의 경우, build.gradle 파일에 다음 의존성을 추가합니다:

implementation 'io.reactivex.rxjava3:rxjava:3.0.0'

이벤트 버스 구현

이벤트 버스 클래스를 만들고 RxJava의 Subject를 사용하여 이벤트를 발행(publish)하고 구독(subscribe)하는 기능을 구현할 수 있습니다. 이벤트 버스는 단일 인스턴스로 유지되어야 하므로 싱글톤 패턴을 사용하여 구현합니다.

import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.subjects.PublishSubject;

public class EventBus {
    private static final EventBus instance = new EventBus();

    private final PublishSubject<Object> subject = PublishSubject.create();

    public static EventBus getInstance() {
        return instance;
    }

    public void publish(Object event) {
        subject.onNext(event);
    }

    public Observable<Object> subscribe() {
        return subject;
    }
}

위의 코드에서는 단일 인스턴스인 instance를 생성하고, PublishSubject를 사용하여 이벤트를 발행하고 구독합니다. publish 메서드를 사용하여 이벤트를 발행하고, subscribe 메서드를 사용하여 해당 이벤트를 구독할 수 있습니다.

이벤트 발행 및 구독 예제

이제 이벤트를 발행하고 구독하는 예제를 살펴보겠습니다. 예를 들어, String 타입의 이벤트를 발행하고 구독하는 코드는 다음과 같습니다:

// 이벤트 발행
EventBus.getInstance().publish("Hello, RxJava!");

// 이벤트 구독
EventBus.getInstance().subscribe()
        .subscribe(event -> System.out.println("Received event: " + event));

위의 코드에서는 publish 메서드를 통해 “Hello, RxJava!”라는 문자열을 이벤트로 발행하고, subscribe 메서드를 통해 해당 이벤트를 구독하여 콘솔에 출력합니다.

결론

RxJava를 사용하여 이벤트 버스를 구현하면 애플리케이션의 다양한 구성 요소간에 간편하게 통신할 수 있습니다. RxJava의 리액티브 스트림을 활용하면 이벤트 기반 프로그래밍에 효율적이고 유연한 솔루션을 제공합니다. RxJava를 사용하여 이벤트 버스를 구현해보세요!

참고 자료: