[JS] Event Emitter를 사용해보자

권기현·2024년 7월 29일

JS

목록 보기
3/3
post-thumbnail

🚀 EventEmitter란?

EventEmitter은 Node.js에서 제공하는 클래스 중 이벤트 기반 프로그래밍을 지원하는 클래스입니다. 이를 통해 객체들이 서로 이벤트를 주고받아 비동기적으로 소통할 수 있습니다.

기본 구조는 pub/sub 패턴 기반으로 움직입니다. Pub/Sub 패턴에 대해 더 알고 싶다면 제가 쓴 블로그 글을 참고해주세요. 📝

EventEmitter을 사용하려면 발행하는 로직과 구독하는 로직이 필요합니다.

  • 발행(Publish): emit 메서드를 이용해 이벤트를 발행하며, 동시에 데이터도 함께 전달할 수 있습니다. 발행된 이벤트는 해당 이벤트를 구독한 모든 리스너에게 전달됩니다.

  • 구독(Subscribe): on 메서드를 이용해 이벤트를 구독할 수 있습니다. 구독할 때 첫 번째 매개변수로 이벤트 이름을, 두 번째 매개변수로는 콜백 함수를 전달합니다. 해당 이벤트가 발생하면 이 콜백 함수가 호출됩니다.

예제 코드 🧑‍💻

아래는 EventEmitter를 사용하는 간단한 예시입니다.

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();

// 'event'라는 이벤트를 구독
myEmitter.on('event', () => {
  console.log('An event occurred!');
});

// 'event'라는 이벤트를 발행
myEmitter.emit('event');

위 코드에서 myEmitter.on('event', ...)는 event라는 이름의 이벤트를 구독합니다. 이 이벤트가 발행될 때마다 구독된 리스너가 호출됩니다.

EventEmitter의 주요 메서드 🛠

• emit(eventName, ...args): 발행자가 호출하여 특정 이벤트를 발생시킵니다. eventName은 이벤트의 이름이고, ...args는 이벤트 리스너에게 전달될 인수들입니다.

• on(eventName, listener): 구독자가 특정 이벤트를 구독하도록 등록합니다. 이벤트가 발생하면 listener 함수가 호출됩니다.

• once(eventName, listener): 한 번만 호출될 이벤트 리스너를 등록합니다. 이벤트가 발생하면 리스너가 호출되고 자동으로 제거됩니다.

• removeListener(eventName, listener): 특정 이벤트에 대한 리스너를 제거합니다.

• removeAllListeners(eventName): 특정 이벤트나 모든 이벤트에 대한 리스너를 모두 제거합니다.

Pub/Sub 패턴의 장점 🌟

  1. 느슨한 결합: 발행자와 구독자는 서로에 대해 알 필요가 없으며, 직접 참조하지 않습니다. 이는 시스템의 모듈화와 유지보수를 용이하게 합니다.

  2. 확장성: 새로운 이벤트나 구독자를 추가해도 기존 시스템에 영향을 주지 않으므로, 확장이 쉽습니다.

  3. 비동기 처리: 이벤트 기반의 비동기 처리 모델을 쉽게 구현할 수 있어, 시스템 성능을 향상시킬 수 있습니다.

EventEmitter는 이러한 Pub/Sub 패턴을 통해 효율적인 이벤트 관리와 비동기 처리를 가능하게 하며, Node.js 애플리케이션에서 핵심적인 역할을 합니다. 🎯

profile
혼자 하는 개발은 없다고 생각하는 개발자

0개의 댓글