[Node.js] 이벤트

Vorhandenheit ·2021년 10월 27일
0

JS/Node 

목록 보기
20/63

이벤트

const http = require('http')

const server = http.createServer();
server.on('request', (reqeust, response) => {
})

오늘 살펴볼 건, server 뒤에 따라오는 on! 입니다.
구글에 검색하면 on은 이벤트고 EventsEmiiter 어쩌구 하는데 이게 어떤식으로 적용되는지 몰랐습니다. 정답을 말하고 시작하자면 EventsEmitter에서 상속을 해서 server객체가 이 이벤트를 사용 할 수 있는 겁니다.
http 트랜잭션을 이해하기 위해 EventsEmiiter가 필요하다고하니 이벤트에 대해서 한번 알아보겠습니다.

  • Node에서는 이벤트를 비동기 방식으로 처리, 또 비동기 방식으로 이벤트를 전달합니다.
  • Node는 이벤트를 처리하기 위해서 EventEmitter라는 클래스를 제공합니다.

EventEmitter

EventEmitters는 Node.js에 내장되어있는 옵저버 패턴 구현입니다.

  • 어떤 종류의 객체를 이벤트 이름으로 정의된 특정 이벤트에 정기적으로 전달해 '리스너'라고 불리는 함수 객체를 실행합니다

옵저버 패턴

객체의 상태 변화를 관찰하는 관찰자, 옵저버들의 목록을 개체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴

1. 하나하나 뜯어봅시당!

  • 이벤트 리스너를 등록하고 출력
function Emitter() {
	this.events = {} // this.events 라는 객체를 초기화
}
Emitter.prototype.on = function  (type, listener) { // 프로토 타입에 on이라는 함수추가
	this.events[type] = this.events[type] || [] // 타입
  	this.events[type].push(listener); // 리스너를 인자로 받아서, Emitter 객체에 추가
}
const emitter = new Emitter(); //생성자 함수로 만듬

emitter.on('request', function () {
	console.log('Hello!')
})
  == // 같습니다.
this.events = {
    request: [
    	function () { console.log('Hello!'}
    ]
 }

on함수는 리스너 함수를 Emitter 아네 등록했습니다. 이제는 등록한 리스너를 호출해야합니다.

Emitter.prototype.emit =  function(type) {
	if (this.events[type]) {
    	this.events[type], forEach(function(listener) {
        	listener();
        })
    }
}

emitter.emit('request') // 이벤트 실행 'Hello!'

2. 메서드

profile
읽고 기록하고 고민하고 사용하고 개발하자!

0개의 댓글