노드의 객체는 EventEmitter를 상속받을 수 있으며, 상속받은 후에는 EventEmitter 객체의 on()과 emit() 메소드를 사용할 수 있다.
on() 메소드는 이벤트가 전달될 객체에 이벤트 리스너를 설정하는 역할을 하는데
이 리스너 함수는 객체로 전달된 이벤트를 받아 처리할 수 있다.
보통은 노드 내부에서 미리 만들어 제공하는 이벤트를 받아 처리하지만, 필요할 때는 직접 이벤트를 만들어 전달 할 수도 있다.
on()메소드 이외에 once() 메소드를 사용할 수도 있다.
once() 메소드를 사용할 때는 이벤트 리스너 함수가 한 번이라도 실행하고 나면 자동으로 제거되므로
이벤트를 딱 한 번만 받아서 처리할 수 있다.
이벤트를 다른 쪽으로 전달하고 싶다면 emit() 메소드를 사용한다.
메소드 이름 |
설명 |
on(evnet, listener) |
지정한 이벤트의 리스너를 추가한다. |
once(event, listener) |
지정한 이벤트의 리스너를 추가하지만 한 번 실행한 후에는 자동으로 리스너가 제거된다. |
removeListener(event,listener) |
지정한 이벤트에 대한 리스너를 제거한다. |
ch04_test2.js 파일을 새로 추가한 후 다음 코드를 입력한다.
process.on('exit', function(){
console.log('exit 이벤트 발생함.');
});
setTimeout(function(){
console.log('2초 후에 시스템 종료 시도함.');
process.exit();
}, 2000);
process 객체는 노드에서 언제든지 사용할 수 있는 객체인데
이미 내부적으로 EventEmitter를 상속받도록 만들어져 있어서 on()과 emit() 메소드를 바로 사용할 수 있다.
process 객체의 on() 메소드를 호출하면서 이벤트 이름을 exit로 지정하면 프로세스가 끝날 때를 알 수 있다.
그 아래 코드에서는 setTimeout() 메소드를 호출하여 2초 후 프로그램을 끝낸다.
이 프로그램을 실행하면 콘솔 창에 다음과 같이 출력된다.
▲ 프로그램 종료 이벤트를 전달받아 처리한 결과
그렇다면 미리 정의되어 있는 이벤트가 아니라 우리가 직접 만든 이벤트는 어떻게 처리할 수 있을까?
앞에서 입력한 것과 비슷한 방식으로 다음 코드를 입력한다.
process.on('tick', function(count){
console.log('tick 이벤트 발생함 : %s', count);
});
setTimeout(function(){
console.log('2초 후에 tick 이벤트 전달 시도함.');
process.emit('tick', '2');
}, 2000);
이번에는 tick 이벤트를 직접 만들고 2초 후에 setTimeout() 메소드를 사용해
process.emit() 메소드를 호출하면서 tick 이벤트를 process 객체로 전달했다.
process.on() 메소드를 호출하여 이벤트를 등록하면 이 메소드를 호출하면서
파라미터로 전달한 tick 이벤트가 발생했을 때 그 다음에 나오는 콜백 함수가 실행된다.
▲ 직접 지정한 이벤트를 보낸 후 전달받아 처리한 결과
'Study > Node.js' 카테고리의 다른 글
[노드JS] 파일 다루기 (0) | 2019.03.23 |
---|---|
[노드JS] 계산기 객체를 모듈로 만들어 보기 (0) | 2019.03.23 |
[노드JS] 이벤트 이해하기 (0) | 2019.03.19 |
[노드JS] 요청 파라미터 확인하기 (0) | 2019.03.18 |
[노드JS] 주소 문자열을 URL 객체로 변환하기 (0) | 2019.03.16 |