노드는 대부분 이벤트기반으로하는 비동기 방식으로 처리합니다. (callback method를 사용합니다.)
노드에는 이벤트를 보내고 받을수 있는 EventEmitter라는것이 있습니다.
EventEmitter //부모 클래스
상속!!(EventEmitter) ( 자식클래스객체 ---상속--> EventEmitter )
객체------------- //자식 클래스
EventListener 객체 - on() 리스너 등록, emit() 이벤트 전달
-------------
노드 객체(자식객체)는 EventEmitter를 상속받을 수 있으며, 상속받은 후에는 EventEmitter 객체의 on()과 emit() 메소드를 사용할 수 있습니다.
또한 once()메소드도있습니다.
Method 명 |
설명 |
on(event, listener) |
지정한 이벤트의 리스너를 추가합니다. |
once(event, listener) |
지정한 이벤트의 리스너를 추가하지만 한번 실행한 후에는 자동으로 리스너가 제거됩니다. |
removeListener(event, listener) |
지정한 이벤트에 대한 리스너를 제거합니다. |
계산기 객체를 Event기능 추가한 모듈로 만들어보기
calc.js
var util = require('util');
var EventEmitter = require('events').EventEmitter;
var Calc = function(){
var self = this;
this.on('stop', function(){
console.log('Calc에 stop event 전달됨.');
});
};
util.inherits(Calc, EventEmitter);
Calc.prototype.add = function(a, b){
return a+b;
}
module.exports = Calc;
module.exports.title = 'calculator';
EventEmitter는 events모듈안에 정의되어이씁니다.
따라서 require()메소드를 호출하여 evnets모듈을 불러들인후,
그안에 속성으로 들어있는 EventEmitter 객체를 참조합니다.
Calc객체는 계산기 객체로서 function 키워드를 사용해 프로토타입객체로만듭니다.
프로토타입 객체 안에서는 this키워드를 이용해 자기자신을 가리킬수있으며,
그 객체 안에 정의된 속성에 접근할 수 있습니다.
그런다음 Calc 객체가 이벤트 처리를 할 수 있도록 EventEmitter를 상속하도록 만듭니다.
util모듈의 inherits()메소드를 사용하면 쉽게 상속을 구현할수있습니다.
Calc 객체는 EventEmiiter 객체를 상속받게 되었습니다.
main.js
var Calc = require('./calc');
var calc = new Calc();
calc.emit('stop');
console.log(Calc.title + ' 에 stop 이벤트 전달');