Node.js에서는 이벤트를 많이 사용한다.
Node.js기반 서버가 작동하면 변수들을 초기화하고,
이벤트가 일어날때까지 기다린다.
이벤트가 감지되면 Callback함수를 호출한다.
(Callback에 관한거는 https://velopert.com/255이분이 정리를 잘 해두셨다. 보면 도움이 될거라 생각한다.)
이벤트가 Callback과 비슷해 보일 수 있지만 차이점은 콜백은 비동기식 함수에서 결과를 반환할 때 호출하고
이벤트 핸들링은 옵저버 패턴에 의해 작동한다.
옵저버 패턴은 디자인 패턴의 일종이다.
자료 설명: https://ko.wikipedia.org/wiki/%EC%98%B5%EC%84%9C%EB%B2%84_%ED%8C%A8%ED%84%B4
EventListeners 함수가 옵저버 역할을 하며, 이벤트를 기다리다가
이벤트가 실행하면 이벤트를 처리하는 함수가 실행되는 방식이다.
Node.js는 Event 모듈과 EventEmitter 클래스가 내장되어 있다.
이것을 이용해서 이벤트와 이벤트핸들러를 연동시킬 수 있다.
// events 모듈 사용
var events = require('events');
// EventEmitter 객체 생성
var eventEmitter = new events.EventEmitter();
연동시키는 방법은 다음과 같다.
// event와 EventHandler 를 연동(bind)
// eventName 은 임의로 설정 가능
eventEmitter.on('eventName', eventHandler);
프로그램 안에서 이벤트를 발생시킬 때 다음 코드를 사용한다.
eventEmitter.emit('eventName');
예제
// events 모듈 사용
var events = require('events');
// EventEmitter 객체 생성
var eventEmitter = new events.EventEmitter();
// EventHandler 함수 생성
var connectHandler = function connected(){
console.log("Connection Successful");
// data_recevied 이벤트를 발생시키기
eventEmitter.emit("data_received");
}
// connection 이벤트와 connectHandler 이벤트 핸들러를 연동
eventEmitter.on('connection', connectHandler);
// data_received 이벤트와 익명 함수와 연동
// 함수를 변수안에 담는 대신에, .on() 메소드의 인자로 직접 함수를 전달
eventEmitter.on('data_received', function(){
console.log("Data Received");
});
// connection 이벤트 발생시키기
eventEmitter.emit('connection');
console.log("Program has ended");
결과물
$ node main.js
Connection Successful
Data Received
Program has ended
EventEmitter 메소드에 관한거는 내용이 많다. 여기를 참고하자
https://nodejs.org/api/events.html#events_class_eventemitter
'node JS' 카테고리의 다른 글
6.Node js Express-2(EJS) (0) | 2020.01.11 |
---|---|
5.Node js Express-1 (0) | 2020.01.04 |
4.Http Module (0) | 2019.12.26 |
2.REPL과 NPM (0) | 2019.12.21 |
1.Node JS 세팅 및 http서버 개설 (0) | 2019.12.15 |
WRITTEN BY
,