이벤트 기반 아키텍처

이벤트 기반 아키텍처(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'); // 아무것도 발생하지 않음 

같이 보기

[편집]

각주

[편집]
  1. K. Mani Chandy Event-Driven Applications: Costs, Benefits and Design Approaches, California Institute of Technology, 2006