Node의 많은 객체들은 이벤트를 발생시키는데, 이러한 객체들은 바로 events.EventEmitter라는 인스턴스를 이용하고 있습니다. 이벤트 이름은 띄어쓰기 대신 대문자로 문자를 구분하는 카멜표기법을 사용하는 것이 정석입니다(강제 X).
모든 메소드는 API 문서에서 볼 수 있으며, 이벤트를 발생시키고 삭제하는 기본적인 메소드에 관해서 알아보겠습니다.
Node.js에서는 이벤트 모듈과 EventEmitter 클래스가 내장되어 있는데, 이를 사용하여 이벤트와 이벤트 핸들러를 연동시킬 수 있습니다.
이벤트를 활용하는 객체에는 해당 이벤트가 발생할 때 대응하여 동작하는 콜백 함수를 가지는데, 이러한 함수를 이벤트 리스너라고 합니다.
const EventEmitter = require('events');
const custom_event = new EventEmitter();
custom_event.on('call', function() {
console.log('이벤트 콜');
});
custom_event.emit('call');
이벤트를 추가하려면, emitter에 이벤트를 연결할 객체, event에 이벤트 이름, listener에 이벤트 핸들러를 작성하면 됩니다. addlistener() 메소드와 on() 메소드는 서로 같으니 둘 중 편한 것을 사용하면 됩니다.
const EventEmitter = require('events');
const custom_event = new EventEmitter();
custom_event.on('call', function() {
console.log('이벤트 콜');
});
custom_event.removeAllListeners();
custom_event.emit('call');
addlistener() 메소드나 on() 메소드를 통해 연결된 이벤트 핸들러를 제거하기 위해 사용됩니다. removeListener() 를 사용하면 특정 이벤트 리스너를 제거할 수 있고, removeAllListeners() 를 사용하면 모든 이벤트 리스너를 제거합니다. removeAllListeners([eventname]) 을 사용하면 해당 이벤트의 모든 리스너를 제거할 수 있습니다.
이벤트 생성코드와 거의 비슷한 코드지만, call 이벤트를 부르기 전 리스너를 삭제했기 때문에 실행하면 콘솔에 아무것도 찍히지 않습니다.