Programming/node.js

비동기 이벤트 프로그래밍, events

gukbap 2015. 5. 11. 17:14
반응형

참고 : http://bcho.tistory.com/885

비동기 이벤트 프로그래밍(event driven programming)


기존의 프로그래밍 언어들은 함수를 부르며 코드를 순차적으로 진행시키는 형태의 구조이다. 이를 procedural programming model이라고 한다. 이 때 코드의 진행 순서를 알 수 있다.


특정 이벤트가 발생하면 미리 이벤트에 맵핑된 함수가 실행되는 형태를 event driven programming, 비동기 이벤트 프로그래밍이라고 한다. node.js가 이 형태의 언어이다. 이 때 해당 함수가 언제 호출되는지는 예측할 수 없다. 즉, event driven programming은 이벤트에 의해서 함수가 호출된다.

이와 비슷한 것으로 윈도우즈, 자바 SWING 등의 GUI 계통의 프로그래밍 언어들이 있다.


node.js는 비동기식 I/O를 사용한다. 즉, I/O 요청을 보내고 코드를 blocking 시켜놓은 상태가 아닌, 다음 코드를 진행시킨 후 I/O가 끝났다는 이벤트를 받으면 지정해놓은 함수를 실행시키는 것이다. 이 함수를 callback 함수라고 한다. node.js에서는 이러한 callback 함수를 Event Listener라고도 한다.


http://blog.naver.com/musasin84/60190078010

선형 시퀸스(Liner Sequence) 형태

각 줄이 이전 줄의 결과에 영향을 받아 실행되는 형태. 작업의 순서가 반드시 보장되어야 할 때 사용한다.

동기적 프로그래밍 모델에서는 자연스럽게 선형 시퀸스 형태를 가지게 되지만 비동기적 프로그래밍 모델에서는  callback 함수를 중첩시켜서 순서를 보장하는 식으로 선형 시퀸스 형태를 만들 수 있다.



event 모듈

node.js는 이벤트를 발생시키고 처리할 때 EventEmitter 객체를 상속 받아서 구현한다.

보통 다음과 같이 구현해 사용한다.


var events = require('events');

var eventEmitter = events.EventEmitter;


Radio 객체를 만들어 이벤트가 발생할 때 함수를 호출하도록 만들어보자.


1. 객체 생성

Radio = function(){

events.Eventemitter.call(this);

};


2. Radio 객체를 EventEmitter로부터 상속 받도록 한다.

util.inherits(Radio, events.EventEmitter);


3. callback 함수를 정의한다.

var radioTurnOn =  function(){

util.debug('turn on');

};



4. Radio 객체를 만들고 이벤트를 바인딩한다.

이벤트 바인딩은 [emitter 객체].on('이벤트명', callback 함수); 로 정의한다.


radio.on('turnon', radioTurnOn);


callback 함수를 정의하지 않고 바로 이벤트를 바인딩 할 때는 다음과 같이 쓴다.


radio.on('turnon', function(){

util.debug('Radio turned on!!')

});


5. 이벤트가 바인딩 된 radio 객체를 생성했으니 객체에 다음과 같이 이벤트를 발생시키면 callback 함수가 호출된다.


radio.emit('turnon');




반응형

'Programming > node.js' 카테고리의 다른 글

http 요청과 응답  (0) 2015.05.11
http  (0) 2015.05.11
url, querystring  (0) 2015.05.11
os  (0) 2015.05.11
process  (0) 2015.05.11