EventEmitter, Promise

์ •ํ˜œ์ธยท2024๋…„ 8์›” 3์ผ

๊ธฐ์ดˆ๊ณต๋ถ€

๋ชฉ๋ก ๋ณด๊ธฐ
10/18

๐Ÿ’จ ์ด๋ฒคํŠธ ํ

https://luv-n-interest.tistory.com/1112

๐Ÿ’จ EventEmitter

โญ• ์ •์˜

๐Ÿ’ก ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

โ— Node.js์—์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜

โ— EventEmitter ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , on() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋“ฑ๋กํ•˜๋ฉด, ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ๋“ฑ๋ก๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰

โ— ์ด๋ฒคํŠธ๋Š” ๋ฌธ์ž์—ด ํ˜•ํƒœ์˜ ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ๋ฐœ์ƒ, ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์ „๋‹ฌ ๊ฐ€๋Šฅ

const EventEmitter = require('events');

// CustomEventEmitter ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
class CustomEventEmitter extends EventEmitter {}

// CustomEventEmitter ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
const customEmitter = new CustomEventEmitter();

// ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.
customEmitter.on('customEvent', (arg1, arg2) => {
  console.log('์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.', arg1, arg2);
});

// ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
customEmitter.emit('customEvent', 'hello', 'world');

๐Ÿ’จ Promise vs. EventEmitter

โญ• Promise

๐Ÿ’ก ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์„ฑ๊ณต ๋˜๋Š” ์‹คํŒจ ์ƒํƒœ๋ฅผ ์‰ฝ๊ฒŒ ํ™•์ธํ•˜๊ณ  ์ฒ˜๋ฆฌ (๋น„๋™๊ธฐ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌ)

โญ• EventEmitter

๐Ÿ’ก ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋™์‹œ์— ์ฒ˜๋ฆฌ (์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌ)

โ— ์žฅ์  :

  • ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก ๊ฐ€๋Šฅ : ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋™์‹œ์— ์‹คํ–‰ ๐Ÿ˜Š
  • ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค๊ณผ ์—ฐ๋™ : ์ด๋ฒคํŠธ๋ฅผ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ์ด๋ฒคํŠธ๋ฅผ ์™ธ๋ถ€๋กœ ์ „์†ก ๊ฐ€๋Šฅ ๐Ÿ˜Š
  • Promise์— ๋น„ํ•ด ์œ ์—ฐ : ํ•จ๊ป˜ ๋“ฑ๋ก๋œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ œ๊ฑฐ ๊ฐ€๋Šฅ, ํ•„์š”์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ ๊ฐ€๋Šฅ ๐Ÿ˜Š
  • ๋น„๋™๊ธฐ ์ž‘์—… ์™ธ ์ž‘์—… ๊ฐ€๋Šฅ : ๋กœ๊ทธ ๊ธฐ๋ก, ์›น์†Œ์ผ“์—์„œ ๋ฐ์ดํ„ฐ ์ „์†ก ๋“ฑ ์ž‘์—… ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ ๐Ÿ˜Š

โ— ๋‹จ์  :

  • ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ : ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ์— ๋“ฑ๋ก๋œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋“ค์ด ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐœ์ƒ ๐Ÿ˜ก
  • ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜X : ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋  ๊ฒฝ์šฐ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์ˆœ์„œ ๋ณด์žฅ X ๐Ÿ˜ก
  • Promise์— ๋น„ํ•ด ์œ ์—ฐ : ํ•จ๊ป˜ ๋“ฑ๋ก๋œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ œ๊ฑฐ ๊ฐ€๋Šฅ, ํ•„์š”์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ ๊ฐ€๋Šฅ ๐Ÿ˜ก
  • async/await ๊ธฐ๋Šฅ ์ง€์› X : Promise์™€ ๋‹ค๋ฅด๊ฒŒ async/await์™€ ๊ฐ™์€ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ์ตœ์‹  ๊ธฐ๋Šฅ ์ง€์› X ๐Ÿ˜ก

โญ• Promise + EventEmitter

๐Ÿ’ก ๋น„๋™๊ธฐ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ Promise ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•˜์—ฌ Promise ๊ฐ์ฒด๊ฐ€ ์„ฑ๊ณต ๋˜๋Š” ์‹คํŒจ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด EventEmitter๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹, ๋” ํšจ์œจ์ ์œผ๋กœ ๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

0๊ฐœ์˜ ๋Œ“๊ธ€