중간에 비동기성으로 발행자와 소비자가 따로 있고 각각의 역할이 구분되어있기 때문에 데이터가 유실될 가능성이 존재
코드 예시
이벤트
// 이벤트 클래스
class MyEvent {
private String message;
public MyEvent(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
이벤트 발행자
// 이벤트 발행자
class EventPublisher {
private List<EventListener> listener = new ArrayList<>();
// 이벤트를 발행하는 메서드
public void publishEvent(MyEvent event) {
for (EventListener listener : listeners) {
listener.onEvent(event);
}
}
// 이벤트 구독자 등록
public void addEventListener(EventListener listener) {
listeners.add(listener);
}
}
이벤트 구독자
// 이벤트 구독자 인터페이스
interface EventListener {
void onEvent(MyEvent event);
}
// 이벤트 구독자
class EventSubscriber implements EventListener {
@Override
public void onEvent(MyEvent event) {
System.out.println("이벤트 수신: " + event.getMessage());
}
}
이벤트 발행과 수신
public class EventExample {
public static void main(String[] args) {
// 이벤트 발행자 생성
EventPublisher eventPublisher = new EventPublisher();
// 이벤트 구독자 생성 및 등록
EventSubscriber subscriber1 = new EventSubscriber();
eventPublisher.addEventListener(subscriber1);
EventSubscriber subscriber2 = new EventSubscriber();
eventPublisher.addEventListener(subscriber2);
// 이벤트 발행
MyEvent event = new MyEvent("안녕하세요!");
eventPublisher.publishEvent(event);
}
}