8000 cancelable-event/README.KOR.md at master ยท hmmhmmhm/cancelable-event ยท GitHub
[go: up one dir, main page]

Skip to content

Latest commit

ย 

History

History
334 lines (219 loc) ยท 13.7 KB

README.KOR.md

File metadata and controls

334 lines (219 loc) ยท 13.7 KB

icon

Cancelable-event

Build Status

์ทจ์†Œ ๊ฐ€๋Šฅํ•œ,

์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ๋Š”,

๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ์ด๋ฒคํŠธ

์บ”์Šฌ๋Ÿฌ๋ธ”์€ Event ์ „ํŒŒ&์ฒ˜๋ฆฌ ๋ชจ๋“ˆ๋กœ, Node.JS ์˜ EventEmitter ์™€ Minecraft ์˜ Bukkit Plugin ์ด๋ฒคํŠธ ์ฒด๊ณ„์— ์˜๊ฐ์„ ๋ฐ›์•„ ๊ฐœ๋ฐœ๋œ Node.JS ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. MIT ๋ผ์ด์„ผ์Šค๋กœ ์ž์œ ๋กญ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Webpack์„ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ˜ธํ™˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜๋ฐฉ๋ฒ•

npm install cancelable-event --save

์žฅ์ 

์ทจ์†Œ ๊ฐ€๋Šฅํ•œ ์ด๋ฒคํŠธ

์ด๋ฒคํŠธ ์ˆ˜์‹ ์ž๋Š” ์ด๋ฒคํŠธ์˜ ์ทจ์†Œ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฒคํŠธ ์ˆ˜์‹ ์ž๋Š” ํ•ด๋‹น ์ด๋ฒคํŠธ์˜ ์ทจ์†Œ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํŠน์ • ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ ํŠน์ • ์ด๋ฒคํŠธ์˜ ์‹คํ–‰์ด ์ ํ•ฉํ•œ์ง€๋ฅผ ์œ ๋™์ ์œผ๋กœ ํ‰๊ฐ€ํ›„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ๋Š” ์ด๋ฒคํŠธ

์ด๋ฒคํŠธ๋Š” ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์ˆ˜์‹ ์ž์—๊ฒŒ ์ „๋‹ฌ๋˜๋ฉฐ, ์ˆ˜์‹ ์ž๋Š” ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์ด๋ฒคํŠธ ๊ฐ’์„ ๋จผ์ € ๋ฐ›์•„์„œ ์ตœ์ข…์ ์œผ๋กœ ์†ก์‹ ์ž์—๊ฒŒ ์ „๋‹ฌ๋  ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ ๋ชจ๋“  ์ƒํ™ฉ์ด ๊ณ ๋ ค๋œ ์ด๋ฒคํŠธ์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋‹น์žฅ ๋ชจ๋“  ์ด๋ฒคํŠธ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

์ถ”์ ๊ฐ€๋Šฅํ•œ ์ด๋ฒคํŠธ

์ด๋ฒคํŠธ๋Š” ์ด๋ฒคํŠธ ๊ฐ’์˜ ์ˆ˜์ •๊ณผ์ •๊ณผ ์ด๋ฒคํŠธ ์ค‘๋‹จ์„ ๊ฒฐ์ •ํ•œ ์ˆ˜์‹ ์ž ์ •๋ณด๊ฐ€ ๋ชจ๋‘ ๊ธฐ๋ก๋˜์–ด ์ด๋ฒคํŠธ ์†ก์‹ ์ž์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ ๊ฐ’์„ ์˜ˆ์ƒ๊ณผ ๋‹ฌ๋ฆฌ ์ˆ˜์ •ํ•œ ์ˆ˜์‹ ์ž์˜ ์—ญ์ถ”์  ๋ฐ ์ด๋ฒคํŠธ๋ฅผ ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ค‘๋‹จํ•œ ์ˆ˜์‹ ์ž ์—ญ์ถ”์ ์„ ์ด๋ฒคํŠธ ์†ก์‹ ์ž ํ•จ์ˆ˜์—์„œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰ ์œ ๋™์ ์ธ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•œ ์ด๋ฒคํŠธ์˜ ๋””๋ฒ„๊น…์ด ๋งค์šฐ ํŽธ๋ฆฌํ•ด์ง‘๋‹ˆ๋‹ค.

์„ค๋ช…

์บ”์Šฌ๋Ÿฌ๋ธ”๋กœ Class ๋˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ด๋ฒคํŠธ ์ „ํŒŒ์ž ๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ, ํ•ด๋‹น ์ „ํŒŒ์ž๋ฅผ ํ†ตํ•ด์„œ ์ด๋ฒคํŠธ๋ฅผ ์†ก์‹ ํ•˜๊ณ  ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—” ์†ก์‹ ์ž์™€ ์ˆ˜์‹ ์ž๊ฐ€ ๋‚˜๋‰˜์–ด์ง‘๋‹ˆ๋‹ค.

์†ก์‹ ์ž (Caller)

์†ก์‹ ์ž๋Š” ์ด๋ฒคํŠธ๋ช…์„ ๋ฌธ์ž์—ด๋กœ ์ž‘์„ฑํ•œ ํ›„, ๊ทธ ์ด๋ฒคํŠธ์— ์›ํ•˜๋Š” ํƒ€์ž…์˜ ๊ฐ’์„ ํ•˜๋‚˜ ์ธ์ž๋กœ ๋‹ฌ์•„์„œ ์ˆ˜์‹ ์ž๋“ค์—๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ์ „ํŒŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†ก์‹ ์ž๋Š” ๋ชจ๋“  ์ˆ˜์‹ ์ž๋“ค์—๊ฒŒ ๊ฐ’์ด ์ฐจ๋ก€๋Œ€๋กœ ์ „ํŒŒ๋œ ํ›„ ์ตœ์ข…์ ์ธ ์ด๋ฒคํŠธ ์ „ํŒŒ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ›๊ฒŒ๋˜๋Š”๋ฐ, ์—ฌ๊ธฐ์—” ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ์ค‘๋‹จ๋˜๊ธธ ์›ํ•˜๋Š”์ง€, ์•„๋‹ˆ๋ฉด ์ด๋ฒคํŠธ ๊ฐ’์ด ํŠน์ •ํ•œ ๊ฐ’์œผ๋กœ ๋ฐ”๋€Œ๊ธธ ์›ํ•˜๋Š”์ง€์™€ ์ˆ˜์‹ ์ž๊ฐ€ ๊ฐ’์„ ๋ฐ”๊พผ ์ด๋ ฅ๊ณผ ์–ด๋А ์ˆ˜์‹ ์ž๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ์ค‘๋‹จ์‹œ์ผฐ๋Š”์ง€ ๊ธฐ๋กํ•œ ๋‚ด์šฉ์ด ๋‹ด๊น๋‹ˆ๋‹ค.

์ˆ˜์‹ ์ž (Listener)

์ˆ˜์‹ ์ž๋Š” ์ด๋ฒคํŠธ ๋ฐœ์ƒ์‹œ ์ด๋ฅผ ์ „๋‹ฌ ๋ฐ›์„ ํ•จ์ˆ˜๋ฅผ ๋œปํ•˜๋ฉฐ, ์–ด๋– ํ•œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„๋•Œ ์ด๋ฅผ ์ˆ˜์‹ ๋ฐ›๊ณ ์ž ํ•œ๋‹ค๋ฉด ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌ ๋ฐ›์„ ํ•จ์ˆ˜๋ฅผ(์ฝœ๋ฐฑ) ์ˆ˜์‹ ์ž๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „ํŒŒ์ž (Dispatcher)

์ „ํŒŒ์ž๋Š” ์†ก์‹ ์ž๋กœ๋ถ€ํ„ฐ ์ด๋ฒคํŠธ๋ฅผ ๋Œ€์‹  ์ „๋‹ฌ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ทธํ›„ ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ๋ฐ›๊ธธ ํฌ๋งํ•˜๋Š” ์ˆ˜์‹ ์ž๋“ค์—๊ฒŒ ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ ์ „ํŒŒํ•ฉ๋‹ˆ๋‹ค. ์ „ํŒŒ์ž๋Š” ์–ด๋А ์ˆ˜์‹ ์ž๊ฐ€ ์ด๋ฒคํŠธ ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ๋ฐ”๊พธ์—ˆ๋Š”์ง€ ์ˆ˜์‹ ์ž์— ์˜ํ•œ ์ด๋ฒคํŠธ ๊ฐ’์˜ ๋ณ€๊ฒฝ ์ „ ํ›„๋ฅผ ๋ชจ๋‘ ๊ธฐ๋กํ•˜๋ฉฐ, ์–ด๋А ์ˆ˜์‹ ์ž์— ์˜ํ•ด์„œ ์ด๋ฒคํŠธ๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ๋Š”์ง€๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ˆ˜์‹ ์ž์—๊ฒŒ ๋ชจ๋‘ ์ „ํŒŒ๊ฐ€ ๋๋‚œ ์ด๋ฒคํŠธ๋Š” ์ตœ์ข…์ ์œผ๋กœ ์†ก์‹ ์ž์—๊ฒŒ ๋‹ค์‹œ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„ (Priority)

์šฐ์„ ์ˆœ์œ„๋Š” ์ด 7๋‹จ๊ณ„๋กœ 0๋ถ€ํ„ฐ 6๊นŒ์ง€ ์ˆซ์ž๋กœ ๋‚˜๋‰˜์–ด์ง€๋ฉฐ ์ˆซ์ž๊ฐ€ ๋†’์„์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์œผ๋ฉด ๋จผ์ € ์ด๋ฒคํŠธ ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ 0 ๋ถ€ํ„ฐ ๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ 6๊นŒ์ง€ 7๋‹จ๊ณ„๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„ ์ˆœ์œ„๋Š” ์ˆซ์ž๋กœ ๋ฐ”๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์šฐ์„ ์ˆœ์œ„์˜ ์ด๋ฆ„์„ ํ†ตํ•œ ์‚ฌ์šฉ ๋˜ํ•œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” ์šฐ์„ ์ˆœ์œ„๋Š” normal = 3 ์ž…๋‹ˆ๋‹ค.

var Priority = {
    under: 0,
    lowest: 1,
    low: 2,
    normal: 3,
    high: 4,
    highest: 5,
    monitor: 6
}

์ฝ”๋“œ ์˜ˆ์‹œ

์ฝ”๋“œ์˜ˆ์‹œ์—๋Š” Dispatcher ์ƒ์„ฑ๊ณผ, ์ด๋ฒคํŠธ ์†ก์‹ , ์ด๋ฒคํŠธ ์ˆ˜์‹  ๋“ฑ์˜ ์˜ˆ์‹œ๊ฐ€ ๋‹ด๊น๋‹ˆ๋‹ค.

์ „ํŒŒ์ž ์ƒ์„ฑ ์ฝ”๋“œ

์ „ํŒŒ์ž๋Š” ๋ณ€์ˆ˜ ๋˜๋Š” ํด๋ž˜์Šค ์ƒ์†์„ ํ†ตํ•ด์„œ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€์ˆ˜๋ฅผ ํ†ตํ•œ Dispatcher ์ƒ์„ฑ

// ES6
import Cancelable from 'cancelable-event'
let myDispatcher = new Cancelable()

// ES3
var Cancelable = require('cancelable-event')
var myDispatcher = new Cancelable()

ํด๋ž˜์Šค๋ฅผ ํ†ตํ•œ Dispatcher ์ƒ์„ฑ

// ES6
class Dispatcher extends Cancelable{
    constructor(){
        super() // ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
    }
}
let myDispatcher = new Cancelable()

์ด๋ฒคํŠธ ์†ก์‹  ์ฝ”๋“œ

์ด๋ฒคํŠธ๋Š” ์ „ํŒŒ์ž์— ์ ‘๊ทผํ•  ์ˆ˜๋งŒ ์žˆ์œผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ์†ก์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ˆœํ•œ ์ด๋ฒคํŠธ ์ „ํŒŒ๋ฐฉ๋ฒ•

์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” ๋ฐ˜๋“œ์‹œ string ํ˜•ํƒœ์—ฌ์•ผํ•˜๋ฉฐ, ๋‘๋ฒˆ์งธ ์ธ์ž๋Š” ํ˜•ํƒœ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์„ ํƒ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

dispatcher.emit(`EVENT_NAME`, `EVENT_VALUE`)

๊ธฐ๋ณธ์  ์ด๋ฒคํŠธ ์ „ํŒŒ๋ฐฉ๋ฒ•

dispatcher.emit(`SMS_RECEIVED`, `it's sms message text!`, 
    (isCanceled, overridedParam, traceData)=>{
        // ์—ฌ๊ธฐ์—์„œ ์ด๋ฒคํŠธ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
    }
)
  • isCanceled ์ด๋ฒคํŠธ๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ๋Š”์ง€๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. boolean ํ˜•์˜ ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  • overridedParam ์ตœ์ข…์ ์œผ๋กœ ๋ณ€๊ฒฝ๋œ ์ด๋ฒคํŠธ ๊ฐ’์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.
  • traceData ์ด๋ฒคํŠธ ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ ๋‚ด์—ญ๊ณผ, ์ค‘๋‹จ ๋‚ด์—ญ์„ ์ถ”์ ํ•œ ๊ฐ’์ด ๋‹ด๊น๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ์ˆ˜์‹ ์ฝ”๋“œ

์ด๋ฒคํŠธ๋Š” ์ „ํŒŒ์ž์— ์ ‘๊ทผํ•  ์ˆ˜๋งŒ ์žˆ์œผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ˆœํ•œ ์ด๋ฒคํŠธ ์ˆ˜์‹ ๋ฐฉ๋ฒ•

dispatcher.on(`EVENT_NAME`, (eventValue)=>{
    // ์—ฌ๊ธฐ์—์„œ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ์ด๋ฒคํŠธ ๊ฐ’์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
})

๊ธฐ๋ณธ์  ์ด๋ฒคํŠธ ์ˆ˜์‹ ๋ฐฉ๋ฒ•

dispatcher.on ์˜ ์„ธ๋ฒˆ์งธ ์ธ์ž๋ฅผ ํ†ตํ•ด์„œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dispatcher.priority ๋˜๋Š” 0~5 ๊นŒ์ง€ ์ˆซ์ž๋ฅผ ์ธ์ž๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•˜์ง€ ์•Š์œผ๋ฉด normal ์ด ์šฐ์„ ์ˆœ์œ„๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

dispatcher.on(`EVENT_NAME`, (value, override)=>{
    // ๋‘๋ฒˆ์งธ ์ธ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ณ 
    // ๋ณ€๊ฒฝํ•  ๊ฐ’์„ ๋„ฃ์Œ์œผ๋กœ์จ
    // ์ด๋ฒคํŠธ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    override(`I_WANT_TO_CHANGE_VALUE_TO_THIS`)
    
    // false ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด
    // ์ด๋ฒคํŠธ๊ฐ€ ์ค‘๋‹จ์ฒ˜๋ฆฌ ๋ฉ๋‹ˆ๋‹ค.
    return false

    // ์—ฌ๊ธฐ์„œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
}, dispatcher.priority.high)

์‘์šฉ๋œ ์‚ฌ์šฉ๋ฐฉ๋ฒ•

Cancelable ์—๋Š” ์—ฌ๋Ÿฌ ์‘์šฉ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์†ก์‹ ์ž์˜ ์ด๋ฒคํŠธ ์ถ”์ ๊ฒฐ๊ณผ ํ™•์ธ๋ฐฉ๋ฒ•

์ด๋ฒคํŠธ๋Š” ์ค‘๋‹จ๋˜๋ฉด ์ฆ‰์‹œ ์ „ํŒŒ๊ฐ€ ์ค‘๋‹จ๋˜๋ฉฐ, ๋ชจ๋“  ์ด๋ฒคํŠธ ์ถ”์ ์€ stack-trace ๋ชจ๋“ˆ์„ ํ†ตํ•ด์„œ ์ด๋ค„์ง‘๋‹ˆ๋‹ค.

dispatcher.emit(`EVENT_NAME`, `EVENT_VALUE`, 
    (isCanceled, overridedParam, traceData)=>{
        // traceData ๊ตฌ์กฐ
        traceData.stopper   // [1]
        traceData.listeners // [2]
        traceData.override  // [3]

        // [1] ์ด๋ฒคํŠธ๋ฅผ ์ค‘๋‹จ์‹œํ‚จ ํ•จ์ˆ˜์˜ ์ถ”์ ์ •๋ณด๊ฐ€ ๋‹ด๊น๋‹ˆ๋‹ค.
        // [2] ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌ๋ฐ›์€ ํ•จ์ˆ˜๋“ค์˜ ์ถ”์ ์ •๋ณด๊ฐ€ ๋‹ด๊น๋‹ˆ๋‹ค.
        // [3] ์ด๋ฒคํŠธ ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ ํ•จ์ˆ˜๋“ค์˜ ์ถ”์ ์ •๋ณด์™€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋‹ด๊น๋‹ˆ๋‹ค.

        // traceData ์˜ ํ•˜์œ„์š”์†Œ ๋ฐ˜ํ™˜ ๊ฐ’ ๊ตฌ์กฐ
        traceData.override   // Override
        traceData.stopper    // TraceItem || null
        traceData.listeners  // TraceItem

        // Override ๊ตฌ์กฐ
        // (Override ๋Š” Trace ์˜ ํ•˜์œ„์š”์†Œ๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง‘๋‹ˆ๋‹ค.)
        traceData.override[].isModified // [1]
        traceData.override[].before     // [2]
        traceData.override[].after      // [3]

        // [1] ํ•ด๋‹น ์ˆœ์„œ์—์„œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๊ฐ€ ๋‹ด๊น๋‹ˆ๋‹ค.
        // [2] ๋ฐ”๋€Œ๊ธฐ ์ „ ๊ฐ’์ด ๋‹ด๊น๋‹ˆ๋‹ค.
        // [3] ๋ฐ”๋€ ํ›„์˜ ๊ฐ’์ด ๋‹ด๊น๋‹ˆ๋‹ค.

        // TraceItem ์˜ ํ•˜์œ„์š”์†Œ ๊ตฌ์กฐ
        traceData.override[].functionName  // [1]
        traceData.override[].lineNumber    // [2]
        traceData.override[].columnNumber  // [3]
        traceData.override[].fileName      // [4]
        traceData.override[].typeName      // [5]
        traceData.override[].text          // [6]

        // [1] ํŒŒ์•…๋œ ํ•จ์ˆ˜๋ช…์ด ๋‹ด๊น๋‹ˆ๋‹ค.
        // [2] ํŒŒ์•…๋œ ์ฝ”๋“œ์ค„ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊น๋‹ˆ๋‹ค.
        // [3] ํŒŒ์•…๋œ ์ฝ”๋“œ์—ด ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊น๋‹ˆ๋‹ค.
        // [4] ํŒŒ์•…๋œ ํŒŒ์ผ์ฃผ์†Œ๊ฐ€ ๋‹ด๊น๋‹ˆ๋‹ค.
        // [5] ํŒŒ์•…๋œ ๊ฐ์ฒด ํƒ€์ž…๋ช…์ด ๋‹ด๊น๋‹ˆ๋‹ค.
        // [6] ํŒŒ์•…๋œ ํ•ด๋‹น ์ฝ”๋“œ์›๋ฌธ์ด ๋‹ด๊น๋‹ˆ๋‹ค.
    }
)

์†ก์‹ ์ž์˜ ๊นŠ์€ ์ด๋ฒคํŠธ ์ถ”์ ๊ฒฐ๊ณผ ํ™•์ธ๋ฐฉ๋ฒ•

dispatcher.emit ์˜ ์„ธ๋ฒˆ์งธ ์ธ์ž์— ๊ฐ์ฒดํ˜•ํƒœ๋กœ ์˜ต์…˜์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. trace ์™€ deep ์ด ์˜ต์…˜์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • trace ๊ธฐ๋ก๋ณ€๊ฒฝ ๋ฐ ์ค‘๋‹จ์ž ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ• ์ง€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์˜ต์…˜์€ true ์ด๋ฉฐ false ๋ฅผ ์ ์šฉ์‹œ ์ถ”์ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ๋„๋ฉด ๋‹น์—ฐํžˆ deep ์˜ต์…˜๋„ ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • deep trace ์ •๋ณด ์ˆ˜์ง‘ ๊นŠ์ด๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. false ๋กœ ์„ค์ •์‹œ ๋ฌธ์ œ๋˜๊ฑฐ๋‚˜ ํ•ด๋‹นํ–‰๋™์„ ์‹คํ–‰ํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ํŠน์ •ํ•ฉ๋‹ˆ๋‹ค. true ๋กœ ์„ค์ •๋˜๋ฉด ํ•ด๋‹น ๋ฌธ์ œ๋˜๋Š” ์†Œ์Šค์ฝ”๋“œ ์‹คํ–‰๊ณผ์ • ์ „์ฒด๋ฅผ ์ตœ๋Œ€ 10๊ฐœ๊นŒ์ง€ ๋ชจ๋‘ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. deep ์˜ต์…˜์„ ํ™œ์„ฑํ™” ํ•œ ๊ฒฝ์šฐ ๊ธฐ์กด trace ๊ฐ์ฒด๋Š” ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
dispatcher.emit(`EVENT_NAME`, `EVENT_VALUE`, 
    (isCanceled, overridedParam, traceData)=>{
         for(let overrideIndex in traceData.override){

             // deep ์˜ต์…˜์„ ์ผœ๋ฉด TraceItem ์ด ์•„๋‹Œ TraceList ๋ฅผ ํš๋“ํ•ฉ๋‹ˆ๋‹ค.
             let traceList = traceData.override[overrideIndex]

             for(let traceListIndex in traceList){
                 // for ๋ฌธ์œผ๋กœ ํ•œ๋ฒˆ ์ˆœํšŒํ•˜๋ฉด TraceItem ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
                 traceData.override[overrideIndex][traceListIndex]
             }
         }
	}

    // ์„ธ๋ฒˆ์งธ ์ธ์ž๋กœ ์ด๋ฒคํŠธ ์†ก์‹  ์˜ต์…˜์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
, { trace: true, deep: true})

์ด๋ฒคํŠธ ๋น„๋™๊ธฐ ์ˆ˜์‹  ๋ฐฉ๋ฒ•

๊ฒฝ๊ณ : ๋น„๋™๊ธฐ ์ˆ˜์‹ ์€ ์ „ํŒŒ์ž ์ƒ์„ฑ์‹œ ๋น„๋™๊ธฐ์ˆ˜์‹ ์ž ์‚ฌ์šฉ์—ฌ๋ถ€ ๋ฅผ ๋ฐ˜๋“œ์‹œ ํ—ˆ์šฉํ•ด์•ผ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์  ์ „ํŒŒ์ž์—์„œ๋Š” ๋น„๋™๊ธฐ ์ˆ˜์‹ ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋น„๋™๊ธฐ ์ˆ˜์‹ ์ž์‚ฌ์šฉ์„ ํ™œ์„ฑํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ํ•ญ๋ชฉ์—์„œ ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ์ˆ˜์‹ ์ž๊ฐ€ ์ด๋ฒคํŠธ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ด๋ฒคํŠธ๋ฅผ ์ค‘๋‹จ์‹œํ‚ค์ง€ ์•Š๊ณ  ์ด๋ฒคํŠธ๊ฐ€ ๋‚˜์ค‘์— ์ทจ์†Œ๋˜๋„ ์ƒ๊ด€ ์—†๋Š” ๊ฒฝ์šฐ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ˆ˜์‹ ์ž๋กœ ์ถ”๊ฐ€๋œ ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์ฐจ๋ก€์ฐจ๋ก€ ์ด๋ฒคํŠธ ๊ฐ’์„ ๋ฐ›์ง€ ์•Š๊ณ  ๋น„๋™๊ธฐ๋กœ ์ฆ‰์‹œ ๊ฐ’์„ ๋ฐ›์•„๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋™๊ธฐ์ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ฒŒ๋˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์˜ˆ์ƒ๋˜๋Š” ์ž‘์—…์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

dispatcher.on(`EVENT_NAME`, (eventValue)=>{
    // dispatcher.priority.async
    // ๋˜๋Š” -1 ๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•จ์œผ๋กœ์จ
    // ๋น„๋™๊ธฐ ์ˆ˜์‹ ์ž๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
}, dispatcher.priority.async)

์ „ํŒŒ์ž ์ƒ์„ฑ์‹œ ์‚ฌ์šฉํ•  ๊ธฐ๋Šฅ ์„ค์ •๋ฐฉ๋ฒ•

์ „ํŒŒ์ž๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋น„๋™๊ธฐ์ˆ˜์‹ ์ž ์‚ฌ์šฉ์—ฌ๋ถ€ ์™€ ๊ฐ’ ์žฌ์ •์˜ ์ œํ•œ์—ฌ๋ถ€ ์™€ ์ถ”์ ์ •๋ณด ์ˆ˜์ง‘ ์ œํ•œ์—ฌ๋ถ€ ๋ฅผ ๊ฐ๊ฐ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€์ˆ˜๋ฅผ ํ†ตํ•œ ์ปค์Šคํ…€ Dispatcher ์ƒ์„ฑ

// ES6
import Cancelable from 'Cancelable'
let myDispatcher = new Cancelable({
    async: true,   // ๊ธฐ๋ณธ: false
    trace: true,   // ๊ธฐ๋ณธ: true
    override: true // ๊ธฐ๋ณธ: true
})

ํด๋ž˜์Šค๋ฅผ ํ†ตํ•œ ์ปค์Šคํ…€ Dispatcher ์ƒ์„ฑ

// ES6
class Dispatcher extends Cancelable{
    constructor(){
        super({
            async: true,   // ๊ธฐ๋ณธ: false
            trace: true,   // ๊ธฐ๋ณธ: true
            override: true // ๊ธฐ๋ณธ: true
        })
    }
}
let myDispatcher = new Cancelable()

๊ฐœ๋ฐœ๋ชฉํ‘œ

Cancelable ๋ชจ๋“ˆ์€ Node.JS์˜ EventEmitter ์™€์˜ ํ˜ธํ™˜์„ ์ง€ํ–ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ทจ์†Œ๊ฐ€๋Šฅํ•œ ์ด๋ฒคํŠธ ๊ตฌํ˜„
  • ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ฅธ ์ด๋ฒคํŠธ ๊ฐ’ ๋ณ€๋™ ๊ตฌํ˜„
  • ์ด๋ฒคํŠธ ๊ฐ’ ๋ณ€๋™ ๋ฐ ์ทจ์†Œ์ž ์ •๋ณด ์—ญ์ถ”์  ๊ตฌํ˜„
  • Capsulable ๋ชจ๋“ˆ์„ ํ†ตํ•œ ๊ฐ์ฒด ์€๋‹‰์„ฑ ๊ตฌํ˜„
  • ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ํ•จ์ˆ˜ ๊ตฌํ˜„
  • ๊ธฐ์ดˆ ํ…Œ์ŠคํŠธ ์œ ๋‹› ์ž‘์„ฑ
  • object ํ˜• ์ด๋ฒคํŠธ ๊ฐ’์˜ ์ „ ํ›„ ๊ฐ’ ์ถ”์  ๊ตฌํ˜„
  • EventEmitter ํ•จ์ˆ˜ ์™„๋ฒฝ์ง€์›
  • ํ…Œ์ŠคํŠธ ์œ ๋‹› ์ถ”๊ฐ€์ž‘์„ฑ
  • ๋ธŒ๋ผ์šฐ์ € ํ…Œ์ŠคํŠธ ์œ ๋‹› ์ถ”๊ฐ€์ž‘์„ฑ
  • ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ํ…Œ์ŠคํŠธ ์œ ๋‹› ์ถ”๊ฐ€์ž‘์„ฑ
  • ๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ํ•จ์ˆ˜์˜ ์„ ์‹คํ–‰ ์ดํ›„ ์ด๋ฒคํŠธ ์™„๋ฃŒ ํ›„ ๋‹ค์‹œํ•œ๋ฒˆ ์žฌ์‹คํ–‰ ๊ตฌํ˜„

๋กœ๊ณ  ์•„์ด์ฝ˜ ์ถœ์ฒ˜

Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY

๋ผ์ด์„ผ์Šค

MIT License.

0