본문 바로가기

Node.js

[Node] 이벤트, 이벤트 메서드

스트림을 공부했을 때, on('data', 콜백) 또는 on('end', 콜백)을 사용했음

바로 data라는 이벤트와 end라는 이벤트가 발생할 때 콜백함수를 호출하도록 이벤트를 등록한 것!

 

이렇게 노드에서 이벤트를 만들고 호출하고 삭제해보자

const EventEmitter = require('events');

const myEvent = new EventEmitter();
myEvent.addListener('event1', () => {
  console.log('이벤트 1');
});
myEvent.on('event2', () => {
  console.log('이벤트 2');
});
myEvent.on('event2', () => {
  console.log('이벤트 2 추가');
});
myEvent.once('event3', () => {
  console.log('이벤트 3');
}); // 한 번만 실행됨

myEvent.emit('event1'); // 이벤트 호출
myEvent.emit('event2'); // 이벤트 호출

myEvent.emit('event3'); // 이벤트 호출
myEvent.emit('event3'); // 실행 안 됨

myEvent.on('event4', () => {
  console.log('이벤트 4');
});
myEvent.removeAllListeners('event4');
myEvent.emit('event4'); // 실행 안 됨

const listener = () => {
  console.log('이벤트 5');
};
myEvent.on('event5', listener);
myEvent.removeListener('event5', listener);
myEvent.emit('event5'); // 실행 안 됨

console.log(myEvent.listenerCount('event2'));

 

$ node event
이벤트 1
이벤트 2
이벤트 2 추가
이벤트 3
2

이벤트 관리를 위한 여러 메서드들

 on(이벤트명, 콜백): 이벤트 이름과 이벤트 발생 시의 콜백을 연결합니다. 이렇게 연결하는 동작을 이벤트 리스닝이라고 부릅니다. event2처럼 이벤트 하나에 이벤트 여러 개를 달아줄 수도 있습니다.

 addListener(이벤트명, 콜백): on과 기능이 같습니다.

 emit(이벤트명): 이벤트를 호출하는 메서드입니다. 이벤트 이름을 인수로 넣으면 미리 등록해뒀던 이벤트 콜백이 실행됩니다.

 once(이벤트명, 콜백): 한 번만 실행되는 이벤트입니다. myEvent.emit('event3')을 두 번 연속 호출했지만 콜백이 한 번만 실행됩니다.

 removeAllListeners(이벤트명): 이벤트에 연결된 모든 이벤트 리스너를 제거합니다. event4가 호출되기 전에 리스너를 제거했으므로 event4의 콜백은 호출되지 않습니다.

 removeListener(이벤트명, 리스너): 이벤트에 연결된 리스너를 하나씩 제거합니다. 리스너를 넣어야 한다는 것을 잊지 마세요. 역시 event5의 콜백도 호출되지 않습니다.

 off(이벤트명, 콜백): 노드 10 버전에서 추가된 메서드로, removeListener와 기능이 같습니다.

 listenerCount(이벤트명): 현재 리스너가 몇 개 연결되어 있는지 확인합니다.

 

 

 


Reference

- Node.js 교과서 개정 2판

'Node.js' 카테고리의 다른 글

[Node] 쿠키와 세션  (0) 2022.12.11
[Node] REST, HTTP 메서드 개념  (0) 2022.12.11
[Node] 파일시스템, 버퍼, 스트림 알아보기  (0) 2022.12.10
[Node] 노드의 내장 모듈들  (0) 2022.12.10
[Node] 노드의 내장 객체들  (0) 2022.12.08