[Node.js] 이벤트와 이벤트 리스너

events를 이용해 이벤트 발생 방법과 처리하는 방법에 대해서 공부

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// event.js
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.emit('event1');
myEvent.emit('event2');

myEvent.once('event3', () => {
console.log('이벤트 3');
});
myEvent.emit('event3');
myEvent.emit('event3'); // 위의 event3 이벤트만 한번 호출됨

myEvent.on('event4', () => {
console.log('이벤트 4');
});
myEvent.removeAllListeners('event4');
myEvent.emit('event4'); // 위의 removeAllListeners를 통해 event4 리스너가 삭제되어 콜백 호출되지 않음

const listener = () => {
console.log('이벤트 5');
};
myEvent.on('event5', listener);
myEvent.removeListener('event5', listener);
myEvent.emit('event5'); // 위의 removeListener를 통해 event5 리스너가 삭제되어 콜백 호출되지 않음

console.log(myEvent.listenerCount('event2'));
1
2
3
4
5
6
% node event.js
이벤트 1
이벤트 2
이벤트 2 추가
이벤트 3
2
  • on(이벤트명, 콜백)
    이벤트 이름과 이벤트 발생 시의 콜백을 연결해주고 이렇게 연결하는 동작을 이벤트 리스닝이라고 부름
    event2처럼 이벤트 하나에 여러개를 달아줄 수도 있음

  • addListener(이벤트명, 콜백)
    on과 기능이 같음

  • emit(이벤트명)
    이벤트를 호출하는 메서드
    이벤트 이름을 인자로 넣어주면 미리 등록해뒀던 이벤트 콜백이 실행됨

  • once(이벤트명, 콜백)
    한번만 실행되는 이벤트
    위의 예제에서 myEvent.emit(‘event3’)을 두 번 연속 호출했지만 콜백이 한번만 실행됨

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

  • removeListener(이벤트명, 리스너)
    이벤트에 연결된 리스너를 하나씩 제거
    event5의 콜백도 호출되지 않음

  • off(이벤트명, 콜백)
    노드 10 버전에서 추가된 메서드로, removeListener와 기능이 같음

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