NodeJS EventEmitter

00_8_3·2021년 2월 26일
0

NodeJS EventEmiiter

Evnet 모듈

Node의 많은 객체들은 이벤트를 발생시키는데, 이러한 객체들은 바로 events.EventEmitter라는 인스턴스를 이용하고 있습니다. 이벤트 이름은 띄어쓰기 대신 대문자로 문자를 구분하는 카멜표기법을 사용하는 것이 정석입니다(강제 X).

모든 메소드는 API 문서에서 볼 수 있으며, 이벤트를 발생시키고 삭제하는 기본적인 메소드에 관해서 알아보겠습니다.

Node.js에서는 이벤트 모듈과 EventEmitter 클래스가 내장되어 있는데, 이를 사용하여 이벤트와 이벤트 핸들러를 연동시킬 수 있습니다.

이벤트를 활용하는 객체에는 해당 이벤트가 발생할 때 대응하여 동작하는 콜백 함수를 가지는데, 이러한 함수를 이벤트 리스너라고 합니다.

events 객체의 메소드

  • emitter.addListener(event, listener) : on() 메소드와 같습니다. 이벤트를 생성하는 메소드입니다.
  • emitter.on(event, listener) : addListener()과 동일합니다. 이벤트를 생성하는 메소드입니다.
  • emitter.once(event, listener) : 이벤트를 한 번만 연결한 후 제거합니다.
  • emitter.removeListener(event, listener) : 특정 이벤트의 특정 이벤트 핸들러를 제거합니다. 이 메소드를 이용해 리스너를 삭제하면 리스너 배열의 인덱스가 갱신되니 주의해야 합니다.
  • emitter.removeAllListeners([event]) : 모든 이벤트 핸들러를 제거합니다.
  • emitter.setMaxListeners(n) : n으로 한 이벤트에 최대허용 개수를 정해줍니다. node.js는 기본값으로 한 이벤트에 10개의 이벤트 핸들러를 작성할 수 있는데, 11개 이상을 사용하고 싶다면 n값을 넘겨주면 됩니다. n값으로 0을 넘겨 주면 연결 개수 제한이 사라집니다.
  • emitter.emit(eventName[, ...args]) : 이벤트를 발생시킵니다.

이벤트 생성

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 이벤트를 부르기 전 리스너를 삭제했기 때문에 실행하면 콘솔에 아무것도 찍히지 않습니다.

0개의 댓글