EventBus

발행: (2026년 1월 9일 오후 04:43 GMT+9)
2 min read
원문: Dev.to

Source: Dev.to

SimpleEventBus 구현

import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;

// Concrete EventBus implementation
public class SimpleEventBus implements MyEventBus {

    private final ConcurrentHashMap>> listenersMap = new ConcurrentHashMap<>();

    // Publish an event to all listeners of a source
    public void push(String source, T event) {
        List> listeners = listenersMap.get(source);
        if (listeners != null && !listeners.isEmpty()) {
            for (MyEventListener listener : listeners) {
                try {
                    listener.onEvent(source, event);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    // Get number of subscribers for a source
    public int getSubscriberCount(String source) {
        List> listeners = listenersMap.get(source);
        return (listeners == null) ? 0 : listeners.size();
    }

    @Override
    public void subscribe(String source, MyEventListener listener) {
        listenersMap.computeIfAbsent(source, key -> new CopyOnWriteArrayList<>()).add(listener);
    }

    @Override
    public void unsubscribe(String source, MyEventListener listener) {
        listenersMap.computeIfPresent(source, (key, list) -> {
            list.remove(listener);
            return list.isEmpty() ? null : list;
        });
    }
}

사용 예시

위에 제시된 EventBus는 Guava의 EventBus와 유사한 EventBus 구현입니다. 별도로 자세히 설명할 필요는 없습니다.

class MessageListener implements MyEventListener {
    private final String name;

    public MessageListener(String name) { this.name = name; }

    @Override
    public void onEvent(String source, Message event) {
        System.out.println(name + " received from [" + source + "]: " + event.getText());
    }
}
Back to Blog

관련 글

더 보기 »

Go용 Rate Limiter 라이브러리 소개

개요 현대 백엔드 시스템에서 레이트 리밋팅은 필수적입니다. 레이트 리밋팅이 없으면 API가 남용, 리소스 고갈 및 불공정 사용에 노출됩니다. 이 라이브러리는 …

Java 멀티스레딩/동시성

Java에서 멀티스레딩이란 무엇인가요? 멀티스레딩은 두 개 이상의 프로그램 부분을 동시에 실행할 수 있게 하는 기능으로, 이러한 부분을 스레드라고 합니다.