Study/Node.js

[노드JS] 이벤트 보내고 받기

AC 2019. 3. 23. 00:54


노드의 객체는 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 이벤트가 발생했을 때 그 다음에 나오는 콜백 함수가 실행된다.




▲ 직접 지정한 이벤트를 보낸 후 전달받아 처리한 결과








LIST