API Basic Events ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

Event / AddHandler / RemoveHandler / RaiseEvent

ClassicUO โ€ข Basic

Event๋Š” ์Šคํฌ๋ฆฝํŠธ ์ด๋ฒคํŠธ๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. AddHandler๋Š” Sub๋ฅผ ๋“ฑ๋กํ•˜๊ณ  RemoveHandler๋Š” ํ•ด์ œํ•˜๋ฉฐ, RaiseEvent๋Š” ๋“ฑ๋ก ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋™๊ธฐ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ •ํ™•ํ•œ ๊ตฌ๋ฌธ

Event Changed(ByVal value As Integer)
Public Event Adjust(ByRef value As Integer)
Private Event Completed()
AddHandler EventName, AddressOf Handler
AddHandler Module.EventName, callback
RemoveHandler EventName, AddressOf Handler
RaiseEvent EventName(arguments)

๋งค๊ฐœ๋ณ€์ˆ˜

  • EventName / Public / Private โ€” ํŒŒ์ผ ์ˆ˜์ค€(์•”์‹œ์  ์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ)์ด๋‚˜ Module ๋‚ด๋ถ€์˜ ํ”„๋กœ์‹œ์ € ๋ฐ”๊นฅ์— ๋‹จ์ˆœ ์ด๋ฆ„์„ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ ‘๊ทผ์€ Public์ด๋ฉฐ Private์€ Module์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๋“ฑ๋ก์—๋Š” Module.EventName์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Public ์ด๋ฒคํŠธ๋„ ์„ ์–ธํ•œ ๋ชจ๋“ˆ๋งŒ RaiseEvent๋กœ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์‹œ์ €๋‚˜ ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์ด๋ฆ„์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • Handler / callback โ€” Handler๋Š” ์œ ์ผํ•˜๊ฒŒ ์„ ์–ธ๋œ Sub๋กœ, AddressOf ๋˜๋Š” ํ˜„์žฌ ๋กœ๋“œํ•œ ์Šคํฌ๋ฆฝํŠธ์˜ ์ฝœ๋ฐฑ ๋ณ€์ˆ˜/ํŒฉํ„ฐ๋ฆฌ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. Function, ์ด๋ฆ„ ๋ฌธ์ž์—ด, ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ์ฐธ์กฐ, ์˜ค๋ฒ„๋กœ๋“œ ๊ทธ๋ฃน์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜ยทํ˜•์‹ยทByVal/ByRef๊ฐ€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํ”„๋กœ์‹œ์ €๋Š” ๊ธฐ์กด ๊ธฐ๋ณธ๊ฐ’ ByRef๋ฅผ ์œ ์ง€ํ•˜๋ฏ€๋กœ ์ฒ˜๋ฆฌ๊ธฐ์—๋Š” ByVal์„ ๋ช…์‹œํ•˜์„ธ์š”.
  • arguments / ByVal / ByRef โ€” RaiseEvent์—๋Š” ๋ชจ๋“  ์œ„์น˜ ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Optional, ParamArray, ๊ธฐ๋ณธ๊ฐ’, ์ด๋ฆ„ ์žˆ๋Š” ์ด๋ฒคํŠธ ์ธ์ˆ˜, Safe Call์€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Event ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’์€ ByVal์ด๋ฉฐ ์Šค์นผ๋ผ๋‚˜ ์ฐธ์กฐ๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  ๊ฐ์ฒด ๋‚ด์šฉ์€ ๋ณต์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ByRef ๋ณ€๊ฒฝ์€ ๋‹ค์Œ ์ฒ˜๋ฆฌ๊ธฐ์— ์ „๋‹ฌ๋˜๊ณ  ํ˜ธ์ถœ์ž์˜ ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜๋‚˜ ์ธ๋ฑ์Šค ์š”์†Œ์— ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜์™€ ์ธ๋ฑ์Šค๋Š” ์ž‘์„ฑ ์ˆœ์„œ๋Œ€๋กœ ํ•œ ๋ฒˆ์”ฉ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

Event, AddHandler, RemoveHandler, RaiseEvent๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(Unit). Boolean, ID, ๊ตฌ๋…์ž ์ˆ˜๋„ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ByRef ๋˜๋Š” Module ๊ณต์œ  ์ƒํƒœ๋กœ ์ „๋‹ฌํ•˜์„ธ์š”. ๊ฐ ์˜ˆ์ œ์˜ Main์€ String "ready", Integer 8, String "ABAC:handler failed"๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋™์ž‘

  • ๊ตฌ๋…์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋งˆ๋‹ค ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋‚˜ ๋‹ค์‹œ ๋กœ๋“œํ•œ ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ตฌ๋… ์—†์ด ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋กœ๋“œ๋œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋กœ ๋‹ค์‹œ ์ง„์ž…ํ•˜๋ฉด ํ•ด์ œํ•˜๊ฑฐ๋‚˜ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ํ๊ธฐํ•  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. IDE๋ฅผ ๋‹ซ์•„๋„ ์‹คํ–‰ ์ค‘์ธ ์Šคํฌ๋ฆฝํŠธ์™€ ๊ตฌ๋…์€ ๋‚จ์ง€๋งŒ ๋…๋ฆฝ์ ์ธ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ด๋ฒคํŠธ ์„œ๋น„์Šค๊ฐ€ ์ƒ๊ธฐ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.
  • AddHandler๋Š” ๋์— ์ถ”๊ฐ€ํ•˜๋ฉฐ ์ค‘๋ณต ๋“ฑ๋ก์€ ๊ฐ™์€ Sub๋ฅผ ๋ฐ˜๋ณต ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. RemoveHandler๋Š” ๋งˆ์ง€๋ง‰์œผ๋กœ ์ผ์น˜ํ•˜๋Š” ๋“ฑ๋ก์„ ์ง€์šฐ๊ณ , ์—†์œผ๋ฉด ์•„๋ฌด ์ผ๋„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ ์–ธยท์ ‘๊ทผยท์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  ์ธ์ˆ˜๋ฅผ ํ‰๊ฐ€ํ•œ ๋’ค ์ˆœ์„œ ์žˆ๋Š” ๋ชฉ๋ก์„ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๊ธฐ ์•ˆ์˜ ๊ตฌ๋… ๋ณ€๊ฒฝ์€ ๋‹ค์Œ RaiseEvent๋ถ€ํ„ฐ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ฒ˜๋ฆฌ๊ธฐ ์˜ค๋ฅ˜๋Š” ๋‚จ์€ ํ˜ธ์ถœ์„ ์ค‘๋‹จํ•˜๊ณ  ํ˜ธ์ถœ์ž์˜ Catch/Finally๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ๋ฐœ์ƒํ•œ ByRef ๋ณ€๊ฒฝ์€ ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค. ์ผ์‹œ ์ •์ง€์™€ ๊ธด๊ธ‰ ์ค‘์ง€๋Š” ์ฒ˜๋ฆฌ๊ธฐ ์•ˆ์—์„œ๋„ ์ž‘๋™ํ•˜๋ฉฐ Catch๋Š” ๊ธด๊ธ‰ ์ค‘์ง€๋ฅผ ์‚ผํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒˆ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฐจ๋‹จ๋˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ํ˜ธ์ถœ์€ ์ž์ฒด ์ทจ์†Œ ์ œํ•œ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ œํ•œ์€ ์ด๋ฒคํŠธ๋‹น 4096๊ฐœ ๊ตฌ๋…, 16๋‹จ๊ณ„ RaiseEvent ์ค‘์ฒฉ, 32๊ฐœ ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ์‹œ์ € ํ”„๋ ˆ์ž„์ž…๋‹ˆ๋‹ค. ์ˆœํ™˜์ด๋‚˜ ๊นŠ์€ ์žฌ๊ท€๋Š” ํด๋ผ์ด์–ธํŠธ ์Šคํƒ์„ ๋„˜์น˜๊ฒŒ ํ•˜์ง€ ์•Š๊ณ  ์žก์„ ์ˆ˜ ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ ์˜ค๋ฅ˜๋ฅผ ๋ƒ…๋‹ˆ๋‹ค. ๊นŠ์€ ์ฒ˜๋ฆฌ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ๊ณต์œ  ์Šค์นผ๋ผ๋Š” Module ํ•„๋“œ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ํŒŒ์ผ ์ˆ˜์ค€ ์Šค์นผ๋ผ๋Š” ๋ณต์‚ฌ๋ณธ์œผ๋กœ ์ƒ์†๋ฉ๋‹ˆ๋‹ค.
  • ์Šคํฌ๋ฆฝํŠธ ์„ ์–ธ ์ด๋ฒคํŠธ๋Š” ์—ฌ์ „ํžˆ ๋ช…์‹œ์ ์ธ RaiseEvent๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ €๋„ยท์ž์›ยท์—ฐ๊ฒฐ ์ž๋™ ๊ตฌ๋…์€ Basic.GameEvents์˜ ํด๋ผ์ด์–ธํŠธ UO. ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Handles, WithEvents, Custom Event, ์ด๋ฒคํŠธ ๋Œ€๋ฆฌ์ž ํ˜•์‹ ๋ฐ ํด๋ž˜์Šค ์ด๋ฒคํŠธ๋Š” ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ

1. ๋“ฑ๋ก ๋ฐ ํ•ด์ œ

# Feed.Message๋Š” text As String์„ ByVal๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด๊ฐ€ ํ‘œ์‹œ๋œ Feed.Publish๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  Record๋Š” ๊ณต์œ  State.log์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. handler๊ฐ€ Record๋ฅผ ๋“ฑ๋กํ•˜์—ฌ "ready"๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ค„์˜ AddressOf Record๋„ ๊ฐ™์€ Sub๋กœ ์ธ์‹ํ•ด ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ํ•ด์ œ ํ›„ "ignored"๋Š” ์ถ”๊ฐ€๋˜์ง€ ์•Š์œผ๋ฉฐ Main์€ "ready"๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Option Explicit On
Module Feed
    Public Event Message(ByVal text As String)
    Public Sub Publish(ByVal text As String)
        RaiseEvent Message(text)
    End Sub
End Module

Module State
    Public Dim log As String = ""
End Module

Sub Record(ByVal text As String)
    State.log = State.log & text
End Sub

Sub Main()
    Dim handler = AddressOf Record
    AddHandler Feed.Message, handler
    Feed.Publish("ready")
    RemoveHandler Feed.Message, AddressOf Record
    Feed.Publish("ignored")
    Return State.log
End Sub

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

Feed.Message๋Š” text As String์„ ByVal๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด๊ฐ€ ํ‘œ์‹œ๋œ Feed.Publish๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  Record๋Š” ๊ณต์œ  State.log์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. handler๊ฐ€ Record๋ฅผ ๋“ฑ๋กํ•˜์—ฌ "ready"๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ค„์˜ AddressOf Record๋„ ๊ฐ™์€ Sub๋กœ ์ธ์‹ํ•ด ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ํ•ด์ œ ํ›„ "ignored"๋Š” ์ถ”๊ฐ€๋˜์ง€ ์•Š์œผ๋ฉฐ Main์€ "ready"๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

2. ๊ฐ’์„ ์—ฐ์†์œผ๋กœ ๋ณ€๊ฒฝ

# Adjust์™€ ๋‘ Sub๋Š” total As Integer ByRef๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. Increment๊ฐ€ 3์„ 4๋กœ ๋ฐ”๊พธ๊ณ  DoubleValue๋Š” 4๋ฅผ ๋ฐ›์•„ 8๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. RaiseEvent๊ฐ€ Main์— 8์„ ๋ณต์‚ฌํ•œ ํ›„ ๋‘ ๊ตฌ๋…์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. Integer 8์€ ์ˆ˜๋Ÿ‰์ด์ง€ True/False๊ฐ€ ์•„๋‹ˆ๋ฉฐ RaiseEvent ์ž์ฒด๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Option Explicit On
Event Adjust(ByRef total As Integer)

Sub Increment(ByRef total As Integer)
    total += 1
End Sub

Sub DoubleValue(ByRef total As Integer)
    total *= 2
End Sub

Sub Main()
    Dim total As Integer = 3
    AddHandler Adjust, AddressOf Increment
    AddHandler Adjust, AddressOf DoubleValue
    RaiseEvent Adjust(total)
    RemoveHandler Adjust, AddressOf Increment
    RemoveHandler Adjust, AddressOf DoubleValue
    Return total
End Sub

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

Adjust์™€ ๋‘ Sub๋Š” total As Integer ByRef๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. Increment๊ฐ€ 3์„ 4๋กœ ๋ฐ”๊พธ๊ณ  DoubleValue๋Š” 4๋ฅผ ๋ฐ›์•„ 8๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. RaiseEvent๊ฐ€ Main์— 8์„ ๋ณต์‚ฌํ•œ ํ›„ ๋‘ ๊ตฌ๋…์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. Integer 8์€ ์ˆ˜๋Ÿ‰์ด์ง€ True/False๊ฐ€ ์•„๋‹ˆ๋ฉฐ RaiseEvent ์ž์ฒด๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

3. ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ณ„์†

# Ready์—๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. First๊ฐ€ A๋ฅผ, Failing์ด B๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ๋˜์ ธ ์ด๋ฒˆ์—๋Š” Last๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. Catch๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๊ณ  Finally๊ฐ€ Failing์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ํ˜ธ์ถœ์€ AC๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉฐ Main์€ "ABAC:handler failed"๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฒ˜๋ฆฌ๊ธฐ์™€ State๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
Option Explicit On
Event Ready()
Module State
    Public Dim log As String = ""
End Module

Sub First()
    State.log = State.log & "A"
End Sub

Sub Failing()
    State.log = State.log & "B"
    Throw "handler failed"
End Sub

Sub Last()
    State.log = State.log & "C"
End Sub

Sub Main()
    Dim message As String = ""
    AddHandler Ready, AddressOf First
    AddHandler Ready, AddressOf Failing
    AddHandler Ready, AddressOf Last
    Try
        RaiseEvent Ready()
    Catch problem
        message = problem
    Finally
        RemoveHandler Ready, AddressOf Failing
    End Try
    RaiseEvent Ready()
    Return State.log & ":" & message
End Sub

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

Ready์—๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. First๊ฐ€ A๋ฅผ, Failing์ด B๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ๋˜์ ธ ์ด๋ฒˆ์—๋Š” Last๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. Catch๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๊ณ  Finally๊ฐ€ Failing์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ํ˜ธ์ถœ์€ AC๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉฐ Main์€ "ABAC:handler failed"๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฒ˜๋ฆฌ๊ธฐ์™€ State๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


en ยท ru ยท uk ยท fr ยท de ยท it ยท es ยท zh-tw ยท ja ยท ko

Basic