Back Ground

Node - 이벤트 본문

Javascript/Node.js

Node - 이벤트

Back 2019. 3. 17. 23:10


이벤트



- 이벤트 생성하기 


process에 on 함수를 사용하여 특정 이벤트를 만들 수 있다.


생성 방법은  on()

1
process.on('이벤트네임' , callback);
cs

이렇게 on 함수를 사용하여 이벤트네임을 정하고 

콜백에 이벤트 함수를 만들어주면된다.



생성한 이벤트 호출방법은 emit()

1
process.emit('이벤트네임');
cs

이렇게 호출 할 수 있다.




예제를 보자면 

JS  

1
2
3
4
5
6
7
8
9
10
11
process.on('exit',function(){
    console.log('exit 이벤트 발생');
});
process.on('tick', () => {
    console.log('tick 이벤트 발생');
});
console.log('2초후에 시스템 종료!');
setTimeout(()=>{
//    process.exit();
    process.emit('tick');
},2000);
cs


예제를 보면 exit는 process 함수에 존재하는 이벤트 종료 함수 이고

우리가 만들 함수는 tick이라는 이름의 함수를 만들어

seTimeout을 이용하여 2초후 호출하게 만들었다.
















EventEmitter Class를 상속하여 사용하기 


ES5 방식

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const util = require('util');
const {EventEmitter} = require('events');
 
//[ES5]
let Calc = function(){
    var self =this;
    this.on('stop',function(){
        console.log('Calc에 stop evnet 전달 됨');
    });
};
Calc.prototype.add = function(a,b){
    return a + b; 
}
util.inherits(Calc,EventEmitter);
 
 
 
module.exports = Calc;
module.exports.title = 'calculator';
cs



ES6 방식 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const util = require('util');
const {EventEmitter} = require('events');
 
//[ES6]class로 선언할 때는 필드 없이 오직 메소드만 선언
class Calc extends EventEmitter{
    constructor(){
        super();
        this._this= this
        this.on('stop',function(){
            console.log('Calc에 stop evnet 전달 됨');
        });
    }
    
    add(x,y){
        return x+y;
    }
    
}
 
module.exports = Calc;
module.exports.title = 'calculator';
cs



EventEmitter는 Node.js의 내장되어져 있는 옵저버 패턴이다.

대기를 하고 감시 하고 있다가 이벤트시 감지하여 실행해주는 방식인데

EventEmitter Class를 불러오기 위해선 컨스트럭터를 통해 this.로 EventEmitter에 접근하여

on함수를 사용 할 수 있게 된다.



1
this._this= this
cs

이런식으로 this를 따로 ES5방식 처럼 self를 calc의 this에 넣어서 보관할수있다.

ES6방식으로 짜놓은 코드는 self대신 변수명을 _this로 바꿨다. 



그런 다음 calc를 내보내준다.




ES6에서는 class안에만 메소드를 넣어 주어야 하는데 

초기 생성자 constructor를 통하여 지정해줄 수 있다.


constructor 상속시 super를 반드시 넣어주어야한다.





다른 js파엘에서 

1
2
3
4
let Calc = require('./sun01_ex12_eventEmit');
 
let calc = new Calc();
calc.emit('stop');
cs


상속받았던 위 예제 파일을 불러와 

인스턴스화 시킨 후 

calc에 들어있던 on.('stop') 함수를

emit으로 불러올 수 있다.




Comments