티스토리 뷰
- 이벤트 이해 하기
1. Node.js => 비동기 방식으로 처리
2. Node 에서 이벤트 처리 하는 EventEmitter 라는것이 만들어 져있음.
3. 다른쪽에서 이벤트를 받고 싶다면 이벤트 리스너 등록
- 이벤트 보내고 받기
노드의 객체는 EventEmitter를 상속 받을 수 있으며, 상속 반은 후에는 EventEmitter 객체의 on() 과 emit() 메소드 사용 가능
on() 메소드 = 이벤트가 전달될 객체에 이벤트 리스너를 설정하는 역할. 보통은 노드 내부에서 미리 만들어 제공하는 이벤트를 받아 처리하지만,필요할 때는 직접 이벤트를 만들어 전달 할 수도 있다.
once() 메소드 = 이벤트 리스너 함수가 한번이라도 실행하고 나면 자동으로 제거 되므로 이벤트를 딱 한번만 받아서 처리 할 수 있음.
emit() 메소드 = 이벤트를 다른쪽으로 전달하고 싶을 경우
- 이벤트를 처리하는 EventEmitter의 주요 메소드
메소드 이름 |
설명 |
on(event,listener) |
지정한 이벤트의 리스너를 추가합니다. |
once(event,listener) |
지정한 이벤트의 리스너를 추가하지만 한번 실행이후 자동 제거 |
removeListener(event,listener) |
지정한 이벤트에 대한 리스너를 제거 한다. |
Example) 이벤트 예제
//이벤트 예제
process.on('exit',function(){
console.log('exit 이벤트 발생함');
});
// process 객체는 노드에서 언제든지 사용할 수 있는 객체, 이미 내부적으로 EventEmitter 를 상속받도록 만들어져 있어 on() emit()메소드 바로 사용 가능
setTimeout(function(){
console.log('2초 후에 시스템 종료 시도함');
process.exit();
},2000);
// 2초후 process.exit, 2000은 단위 밀리세컨드를 나타내므로 2초후 종료한다.
Example2) 이벤트 전달 예제
// 우리가 직접 만든 이벤트 전달 처리
process.on('tick',function(count){
console.log('tick Event Occur : %s',count);
});
// tick Event 생성하고 process.on 메소드를 이용하여 이벤트를 등록하면 이 메소드를 호출하면서 파라미터로 전달한 tick 이벤트가 발생했을 때 그다음에 나오는 콜백 함수가 실행 된다.
setTimeout(function(){
console.log('2초 후에 tick 이벤트 전달을 시도함');
process.emit('tick','2');
},2000);
// setTimeout 메소드를 통해 process.emit() 메소드를 호출하면서 tick 이벤트를 process 객체에 전달 함.
- 계산기 객체를 모듈로 만들어 보기
var util = require('util');
var EventEmitter = require('events').EventEmitter;
// EventEmitter 는 Events 모듈 안에 정의 되어 있고, require() 메소드를 호출하여 events 모듈을 불러들인후 그 안에 속성으로 들어있는 EventEmitter참조
var Calc = function(){
var self = this; // this 키워드를 이용해 자기 자신을 가리킬수 있다. 그 안에 정의된 속성에 접근 가능
this.on('stop',function(){
console.log('calc to stop Event Pass');
});
//stop 이벤트를 처리하기 위해 Calc 객체 안에서 one 메소드를 호출한다.
};
// Calc 객체는 계산기 객체로서, function 키워드를 사용해 프로토 타입 객체를 만든다. - 계산을 할때마다 공용으로 써야하므로 프로토타입 객체로 만든다.
util.inherits(Calc,EventEmitter); // Calc 객체가 이벤트 처리를 할 수 있도록 EventEmitter 상속을 하는데, 이때 util 모듈에 있는 inherits()메소드를 사용하면 쉽게 정의 가능. (이미 위에서 utill 모듈을 require 하였으므로 오류 발생 X)
Calc.prototype.add = function(a,b){
return a+b;
}
// Calc 객체 안에 들어 있는 prototype 객체의 속성으로 add 함수를 추가 하면 new 연산자를 이용해 Calc 객체의 인스턴스 객체를 만들었을 때 add() 함수를 사용할 수 있다.(why? 프로토 타입은 공용의 메모리 공간에서 사용할 수 있는 변수나 함수를 저장한다고 생각을 하면 쉽다. 따라서, new 연산자를 이용해서 객체의 인스턴스 객체를 만들 었을 때 접근이 가능해 진다.)
module.exports = Calc; // calc3.js 파일에 정의한 모듈을 불러들이는 쪽에서 Calc 객체를 참조 할 수 있도록 module.exports 에 Calc 객체저장
module.exports.title = 'calculator'; // title 속성의 값으로 calculator 라는 이름 설정.
<module VS module.export 차이점 Link>
! Click !
2초 후에 시스템 종료 시도함
exit 이벤트 발생함
- 이제 위의 app.js(calc) 모듈을 가져오는 연습을 해보겠습니다.
var Calc = require('./app'); // app.js 파일을 참조 한다 아까 module.exports 를 하였으므로
var calc = new Calc();
calc.emit('stop');
console.log(Calc.title + "에 stop 이벤트 전달함.")
calc to stop Event Pass
calculator에 stop 이벤트 전달함.
'Node.js' 카테고리의 다른 글
[node.js]로그 파일 남기기 - winston 모듈 (1) | 2017.09.18 |
---|---|
[node.js]파일 입출력 / 디렉터리 생성 (0) | 2017.09.18 |
[node.js]주소 문자열과 요청 파라미터 다루기 (0) | 2017.09.17 |
[node.js]프로토 타입 2 (0) | 2017.09.17 |
[node.js]프로토 타입 이해하기 (0) | 2017.09.17 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- node.js
- 백준알고리즘
- BFS
- 머신러닝
- MVC
- 코드엔진
- 감자개발자
- 학교
- 텐서플로우
- node
- 스프링
- Algorigm
- C langauge
- TensorFlow
- db
- 리버싱
- Spring
- 노드
- programming
- 안드로이드
- 백준
- 초보자를 위한 C언어 300제
- 감자코딩
- Android
- C언어
- 프로그래밍
- 알고리즘
- 개발하는 관광이
- Controller
- 복습
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함