노드는 대부분 이벤트기반으로하는 비동기 방식으로 처리합니다. (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 이벤트 전달');

 



+ Recent posts