Node.js - 이벤트 에미터: 초보자 가이드

안녕하세요, 미래의 코딩 슈퍼스타! 오늘 우리는 Node.js 이벤트 에미터의 세계로 흥미로운 여정을 떠납니다. 코드를 한 줄도 작성해본 적이 없어도 걱정하지 마세요 - 나는 당신의 친절한 안내자가 되어, 이 주제를 단계별로 풀어 설명해드릴게요. 이 튜토리얼의 끝을 맺을 때쯤이면, 당신은 프로처럼 이벤트를 방출할 수 있을 거예요!

Node.js - Event Emitter

이벤트 에미터는 무엇인가요?

코드로 뛰어들기 전에, 이벤트 에미터가 무엇인지 이해해 보겠습니다. 당신이 파티(물론, 코딩 파티입니다!)에 있는 상상해 봅시다. DJ는 이벤트 에미터입니다. 그들은 음악을 재생합니다(이벤트를 방출합니다), 그리고 그들이 당신의 좋아하는 노래를 재생할 때, 당신은 춤을 추습니다(이벤트에 응답합니다). Node.js에서 이벤트 에미터는 그 DJ와 같은 역할을 합니다 - 그것은 프로그램의 다른 부분이 듣고 반응할 수 있는 신호를 보낼 수 있습니다.

이벤트 에미터 시작하기

Node.js에서 이벤트 에미터가 어떻게 작동하는지 보기 위해 간단한 예제를 시작해 보겠습니다.

const EventEmitter = require('events');

// 새로운 이벤트 에미터 생성
const myEmitter = new EventEmitter();

// 이벤트 리스너 정의
myEmitter.on('greet', () => {
console.log('Hello, World!');
});

// 이벤트 방출
myEmitter.emit('greet');

이를 해부해 보겠습니다:

  1. 우리는 events 모듈을 임포트하여 이벤트 에미터 기능에 접근할 수 있습니다.
  2. 우리는 새로운 이벤트 에미터 객체 myEmitter를 생성합니다.
  3. 우리는 on 메서드를 사용하여 'greet' 이벤트의 리스너를 설정합니다.
  4. 'greet' 이벤트가 발생할 때, 그것은 콘솔에 "Hello, World!"를 출력합니다.
  5. 마지막으로, 우리는 emit 메서드를 사용하여 'greet' 이벤트를 트리거합니다.

이 코드를 실행하면 콘솔에 "Hello, World!"가 출력됩니다. 그것은 우리의 DJ가 당신의 좋아하는 노래를 재생한 것과 같습니다!

이벤트에 파라미터 추가하기

이벤트는 데이터를 운반할 수도 있습니다. 우리의 예제를 이름을 포함시키기 위해 수정해 보겠습니다:

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

myEmitter.on('greet', (name) => {
console.log(`Hello, ${name}!`);
});

myEmitter.emit('greet', 'Alice');
myEmitter.emit('greet', 'Bob');

이제 우리는 'greet' 이벤트를 방출할 때 이름을 파라미터로 전달합니다. 우리의 리스너 함수는 이 이름을 받아들여 인사를 합니다. 이 코드를 실행하면 다음과 같은 출력이 나타납니다:

Hello, Alice!
Hello, Bob!

이제 우리의 DJ는 노래 요청과 헌정을 받는 것처럼 보입니다!

여러 리스너

이벤트 에미터의 멋진 점 중 하나는 동일한 이벤트에 여러 리스너를 가질 수 있다는 것입니다. 이를 실제로 보겠습니다:

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

myEmitter.on('party', () => {
console.log('Let\'s dance!');
});

myEmitter.on('party', () => {
console.log('Time for snacks!');
});

myEmitter.on('party', () => {
console.log('Taking selfies!');
});

myEmitter.emit('party');

이 코드를 실행하면 다음과 같은 출력을 보게 됩니다:

Let's dance!
Time for snacks!
Taking selfies!

각 리스너는 'party' 이벤트에 대해 자신만의 방식으로 응답합니다. 이는 우리의 코딩 파티에서 다른 사람들이 같은 노래에 대해 독특한 반응을 보이는 것과 같습니다!

일회성 리스너

occasionally, you want a listener to respond only once to an event. For this, we use the once method:

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

myEmitter.once('special', () => {
console.log('This will only happen once!');
});

myEmitter.emit('special');
myEmitter.emit('special');
myEmitter.emit('special');

이 코드는 "This will only happen once!"라는 문구를 단 한 번만 출력합니다,哪怕我们发射了三次事件。 It's like a one-time offer at our coding party – you snooze, you lose!

오류 이벤트

오류 처리는 프로그래밍에서 매우 중요합니다. 이벤트 에미터는 이러한 목적으로 특별한 'error' 이벤트를 가지고 있습니다:

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

myEmitter.on('error', (err) => {
console.error('Whoops! There was an error:', err.message);
});

myEmitter.emit('error', new Error('Something went wrong!'));

이 코드는 'error' 이벤트의 리스너를 설정하고 그런 다음 오류를 방출합니다. 출력은 다음과 같습니다:

Whoops! There was an error: Something went wrong!

이는 우리의 코딩 파티에서 안전망을 가지고 있는 것과 같습니다 - 무언가 잘못되면 우리는 대처할 준비가 되어 있습니다!

리스너 제거

occasionally, you might want to stop listening to certain events. You can do this with the removeListener method:

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

function partyTime() {
console.log('Party time!');
}

myEmitter.on('celebrate', partyTime);

myEmitter.emit('celebrate');  // Outputs: Party time!

myEmitter.removeListener('celebrate', partyTime);

myEmitter.emit('celebrate');  // No output

Here, we remove the listener after the first emit, so the second emit doesn't trigger the function. It's like telling the DJ you're taking a break from dancing!

이벤트 에미터 메서드

여기서는 가장 자주 사용되는 이벤트 에미터 메서드의 표를 제공합니다:

메서드 설명
on(eventName, listener) 지정된 이벤트에 리스너 함수 추가
emit(eventName[, ...args]) 지정된 이벤트 트리거
once(eventName, listener) 일회성 리스너 함수 추가
removeListener(eventName, listener) 특정 이벤트의 리스너 제거
removeAllListeners([eventName]) 모든 리스너 또는 특정 이벤트의 모든 리스너 제거
listeners(eventName) 지정된 이벤트의 리스너 배열 반환
listenerCount(eventName) 특정 이벤트의 리스너 수 반환

결론

축하합니다! 지금까지 Node.js 이벤트 에미터의 세계로 첫 걸음을 뗐습니다. 우리는 기본적인 내용에서 이벤트 생성자와 리스너, 오류 처리 및 리스너 제거에 이르기까지 다루었습니다. 이벤트 에미터는 Node.js에서 강력한 도구로, 동적인 반응 프로그램을 만들 수 있게 해줍니다.

기억하세요, 연습이 완벽을 이루ります. 자신만의 이벤트 에미터를 만들어 보세요, 다양한 이벤트와 리스너를 실험해 보세요, 그리고 가장 중요한 것은 즐겁게 하세요! 누구 knows, 다음 코딩 파티에서 프로 DJ가 될지도 모릅니다, 이벤트를 마스터하며!

행복한 코딩을 기원하며, 당신의 이벤트가 항상 리스너를 찾기를 바랍니다!

Credits: Image by storyset