EventEmitter 는 NodeJS 에 내장되어있는 옵저버 패턴 입니다.
NodeJS 의 EventEmitter의 API Document를 보면 아래와 같이 나와 있습니다.
API Document를 그대로 해석을 한다면 " 대부분의 NodeJS Core API 는 특정 종류의 객체 (emiiter) 가 함수 객체(listenr) 를 호출하게하는 이름의 이벤트를 내보내는 관용 이벤트 기반 아키텍쳐로 구축이 된다."
이벤트를 내보내는 모든 객체는 EventEmitter 클래스의 인스턴스 입니다. 객체는 객체가 호출되는 이름으로 하나 이상의 함수를 연결할수 있는 eventEmiiter.on() 함수를 호출합니다.
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
console.log('an event occurred!');
});
myEmitter.emit('event');
//an event occurred!
위 코드를 보면 NodeJS 의 내장 모듈인 events 를 가지고 와서 MyEmitter 클래스에 상속을 했습니다. 그리고 myEmitter라는 객체를 생성후 on() 이라는 메소드에 'event' 로 이벤트 이름을 세팅후 'an event occurred!' 를 print 를 할수있는 함수를 작성하였습니다.
그리고 myEmiiter.emit('event') 를 호출하였을때 해당 문자열이 출력이 되는것을 확인할수가 있습니다.
즉 on('eventName') 설정한 내용이 emit('eventName') 으로 호출이 된다고 할수 있다
그럼 this 로 EventEmitter 내부의 함수를 호출하였을때는 어떻게 될까요 ?
아래 코드를 추가 하여 실행해 보았습니다.
myEmitter.on("thisEmiiter", (a, b) => {
console.log(a, b, this, myEmitter)
})
myEmitter.emit("thisEmiiter", "a", "b")
//a b {} MyEmitter {
_events:
[Object: null prototype] { event: [Function], thisEmiiter: [Function] },
_eventsCount: 2,
_maxListeners: undefined }
this 를 호출하였을때 {} 객체가 출력이 되었는데 왜 출력이 되었을까요 ?
//이후 업데이트
업데이트 내용
EventEmitter 동작방식
'개발이야기 > Node.js' 카테고리의 다른 글
Lodash, 더 쉽고 효율적인 코드 작성하기 (0) | 2024.06.27 |
---|---|
macOS 에서 docker 로 redis 설치후 node.js 로 연동해기 (0) | 2021.04.18 |
Static Factory Method Pattern (0) | 2021.04.13 |
Singleton Pattern (0) | 2021.04.12 |
Promise.all 과 Promise.race (0) | 2021.04.11 |