상위 질문
타임라인
채팅
관점
이벤트 기반 아키텍처
위키백과, 무료 백과사전
Remove ads
이벤트 기반 아키텍처(event-driven architecture, EDA)는 이벤트의 제작, 감지, 소비, 반응을 제고하는 소프트웨어 아키텍처 패턴이다.
이벤트는 "상태의 상당한 변화"로 정의할 수 있다.[1] 예를 들어, 소비자가 자동차를 구매할 때 자동차의 상태는 "판매 중"에서 "판매 완료"로 바뀐다.
구현 및 예시
요약
관점
자바 스윙
public class FooPanel extends JPanel implements ActionListener {
    public FooPanel() {
        super();
        JButton btn = new JButton("Click Me!");
        btn.addActionListener(this);
        this.add(btn);
    }
    @Override
    public void actionPerformed(ActionEvent ae) {
        System.out.println("Button has been clicked!");
    }
}
다른 방법으로는 다음과 같다.
public class FooPanel extends JPanel {
    public FooPanel() {
        super();
        JButton btn = new JButton("Click Me!");
        btn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                System.out.println("Button has been clicked!");
            }
        });
        this.add(btn);
    }
}
자바스크립트
(() => {
  'use strict';
  class EventEmitter {
    constructor() {
      this.events = new Map();
    }
    on(event, listener) {
      if (typeof listener !== 'function') {
        throw new TypeError('The listener must be a function');
      }
      let listeners = this.events.get(event);
      if (!listeners) {
        listeners = new Set();
        this.events.set(event, listeners);
      }
      listeners.add(listener);
      return this;
    }
    off(event, listener) {
      if (!arguments.length) {
        this.events.clear();
      } else if (arguments.length === 1) {
        this.events.delete(event);
      } else {
        const listeners = this.events.get(event);
        if (listeners) {
          listeners.delete(listener);
        }
      }
      return this;
    }
    emit(event, ...args) {
      const listeners = this.events.get(event);
      if (listeners) {
        for (let listener of listeners) {
          listener.apply(this, args);
        }
      }
      return this;
    }
  }
  this.EventEmitter = EventEmitter;
})();
사용법:
const events = new EventEmitter();
events.on('foo', () => { console.log('foo'); });
events.emit('foo'); // "foo" 출력
events.off('foo');
events.emit('foo'); // 아무것도 발생하지 않음
Remove ads
같이 보기
각주
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads