API Basic Enum ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Enum / End Enum
ClassicUO โข Basic
Enum์ ์คํฌ๋ฆฝํธ ์ํ์ ๋ชจ๋๋ฅผ ๋ํ๋ด๋ ์ด๋ฆ ์๋ Integer ์์๋ฅผ ๋ฌถ์ต๋๋ค. ํ์ผ์ด๋ Module ์์ค์ ์ ์ธํ๋ฉฐ Sub/Function ๋ด๋ถ์๋ ์ ์ธํ ์ ์์ต๋๋ค. VB.NET ์ด๊ฑฐํ์ ์ผ๋ถ๋ฅผ ์ง์ํ๋ฉฐ .NET Enum ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ์์ต๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
[Public | Private] Enum name [As Integer]
member [= constantExpression]
...
End Enum
Dim state As name = name.member
ModuleName.name.member
๋งค๊ฐ๋ณ์
Public / Privateโ ๊ธฐ๋ณธ์ Public์ด๋ฉฐ Module ๋ด๋ถ๋ ๊ฐ์ต๋๋ค. Private์ Module ๋ด๋ถ์์๋ง ํ์ฉ๋๊ณ ๋ค๋ฅธ ๋ชจ๋๊ณผ ํ์ผ ๋ฒ์์์ ํ์ ๋ฐ ๋ฉค๋ฒ๋ฅผ ์จ๊น๋๋ค.nameโ Mode์ฒ๋ผ ์ ์๋ ๋จ์ ์ด๋ฆ์ ์ฌ์ฉํ๋ฉฐ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค. UO์ ๋ด์ฅ ํ์ ์ด๋ฆ์ ์์ฝ๋์ด ์์ต๋๋ค. ์ ์ฒด ์ด๋ฆ์ Enum, Module, ์ ์ญ ๋ณ์์ ์ค๋ณต๋ ์ ์์ต๋๋ค.As Integerโ ์ ํ ์ฌํญ์ ๋๋ค. ๊ธฐ๋ฐ ํ์์ ๋ถํธ ์๋ 32๋นํธ Integer, -2147483648..2147483647๋ง ์ง์ํฉ๋๋ค. ๋ค๋ฅธ ํ์์ ๊ฑฐ๋ถ๋ฉ๋๋ค. ๋ณ์, ๋งค๊ฐ๋ณ์, Function ๋ฐํํ์ As Mode๋ ์ผ๋ฐ Integer ์ ์ฅ ๋ฐ ๋ณํ์ ์ฌ์ฉํ๋ฉฐ ๋์ด๋ ๋ฉค๋ฒ ๊ฐ์ผ๋ก ์ ํํ์ง ์์ต๋๋ค. ์ด๊ธฐํํ์ง ์์ผ๋ฉด 0์ ๋๋ค.memberโ ํ ์ค์ ๋จ์ ๋ฉค๋ฒ ์ด๋ฆ ํ๋, ์ต์ ํ ๋ฉค๋ฒ๊ฐ ํ์ํฉ๋๋ค. ์ค๋ณต ์ด๋ฆ, True, False๋ ๊ธ์ง๋ฉ๋๋ค. ์์ด ์์ผ๋ฉด ์ฒซ ๊ฐ์ 0, ์ดํ ๊ฐ์ ์ด์ ๊ฐ์ 1์ ๋ํฉ๋๋ค. ์๋ก ๋ค๋ฅธ ์ด๋ฆ์ด ๊ฐ์ ๊ฐ์ ๊ฐ์ ธ๋ ๋ฉ๋๋ค.constantExpressionโ ์ ํ์ ์์ ์: 10์ง/0x ์ ์, ๊ดํธ, ๋จํญ ์์, + - * / Mod, ์ด์ ๋ฉค๋ฒ์ ์ด๋ฏธ ์ ์ธ๋ ์ซ์ Const. ์ต์ข ๊ฐ์ ๋ฒ์ ๋ด ์ ์์ฌ์ผ ํ๋ฉฐ ์ค๊ฐ ๋๋์ ์๋ ์์๊ฐ ํ์ฉ๋ฉ๋๋ค. ์ฐธ์กฐ Const๋ Integer ๊ฒฐ๊ณผ์ฌ์ผ ํ๋ฉฐ ํ์ ์์ ๋๋ As Integer/Long/Short/Byte๋ง ํ์ฉ๋ฉ๋๋ค. ํจ์ ํธ์ถ, ๋ณ์, ๋ฌธ์์ด, ๋น๊ต, ๋ฐฐ์ด ์ฝ๊ธฐ๋ ๊ธ์ง๋ฉ๋๋ค. ์ดํ ๋ฉค๋ฒ ์ฐธ์กฐ, ์ํ ์์กด์ฑ, 128๋จ๊ณ ์ด๊ณผ ์์กด์ฑ์ ๊ฑฐ๋ถ๋ฉ๋๋ค.name.memberโ Mode.Ready๋ก ์ฝ๊ณ ๋ชจ๋ ์ธ๋ถ์์๋ Tools.Mode.Ready๋ฅผ ์ฌ์ฉํฉ๋๋ค. Tools ์์์๋ Mode.Ready, With Mode ์์์๋ .Ready๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋์ , +=, ByRef ๋์ฐ๊ธฐ๋ก ์์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. Enum ํ์์ ํจ์์ฒ๋ผ ํธ์ถํ์ง ์์ต๋๋ค.
๋ฐํ๊ฐ
์ ์ธ ์์ฒด๋ ๋ฐํ๊ฐ๊ณผ ํธ์ถ ๊ดํธ๊ฐ ์์ต๋๋ค. ๋ฉค๋ฒ๋ฅผ ์ฝ์ผ๋ฉด Integer, ์๋ฅผ ๋ค์ด Mode.Working = 3์ ๋ฐํํฉ๋๋ค. ์ํ๊ฐ์ด์ง ์๋ ์ฑ๊ณต ํ์๋ ์๋๋๋ค. state = Mode.Finished๋ผ๋ Boolean ๋น๊ต๋ 1/True ๋๋ 0/False๋ฅผ ๋ฐํํ๋ฉฐ ๋ ํ๊ธฐ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ํ 0์ ์คํจ๊ฐ ์๋๋ผ Idle์ผ ์ ์์ต๋๋ค.
๋์
- ์ค๋น ๋จ๊ณ์์ EnumCatalog๊ฐ ์คํฌ๋ฆฝํธ/API๋ฅผ ์คํํ์ง ์๊ณ ์ด์ ์ซ์ ์์์ ์๋ ๋ฒํธ๋ฅผ ๊ณ์ฐํ๋ฉฐ ์ด๋ฆ, ์ ๊ทผ, ๋ฒ์๋ฅผ ๊ฒ์ฌํฉ๋๋ค. SC026์ Option Explicit์ด ์์ด๋ ์์์ ์ฐจ๋จํฉ๋๋ค. ๊ตฌ๋ฌธ ์ค๋ฅ๋ ์คํ์ ์ฐจ๋จํ๊ณ ํธ์ง ์ค ๋ฏธ์์ฑ ์ ์ธ์ ์ง๋จ์ ํ์ํฉ๋๋ค.
- DefinitionCollector๋ ์ ์ญ ์ด๊ธฐํ ๋ฐ Optional ๊ธฐ๋ณธ๊ฐ๋ณด๋ค ๋จผ์ ๋ถ๋ณ ๋ฉค๋ฒ๋ฅผ ๋ฑ๋กํ๋ฏ๋ก ํด๋น ์์น๋ ํ์ผ ๋ค์ชฝ์ Enum๋ ์ฐธ์กฐํ ์ ์์ต๋๋ค. Enum ๋ด๋ถ ์์ ์ฌ์ ํ ์ด์ ์์๋ง ์ฌ์ฉํฉ๋๋ค. ์ค๋น๋ ์คํฌ๋ฆฝํธ๊ฐ ๊ณ ์ ๋ชฉ๋ก์ ๋ณด๊ดํ๊ณ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ฉด ๊ต์ฒด๋ฉ๋๋ค.
- ScriptBindings๋ ๋ชจ๋ ์๋ ์ด๋ฆ๊ณผ Private์ ํ ๋ฒ ํด์ํฉ๋๋ค. ์คํ์ ์ผ๋ฐ ์์๋ฅผ ์ฝ์ผ๋ฉฐ ๋ฐ๋ณต๋ฌธ์์ ์ฌ๊ณ์ฐํ๊ฑฐ๋ ๋ฆฌํ๋ ์ ์ ์ฌ์ฉํ์ง ์์ต๋๋ค. As Mode๋ Integer๋ก ์ ๊ทํ๋์ด ๋๋ฒ๊ฑฐ์ Integer๋ก ํ์๋ ์ ์์ต๋๋ค. Include์์ ์ ์ธ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. Flags ํน์ฑ, System.Enum ๋ฉ์๋, ์์์ ๋ฉค๋ฒ ๊ฐ์ ธ์ค๊ธฐ, ์๋ ๋ฉค๋ฒ ๋ชฉ๋ก์ ์์ต๋๋ค.
์์
1. ์ํ์ ์ด๋ฆ ์ง์
# Idle=0๊ณผ Queued=1์ ์๋์
๋๋ค. Working=10์ผ๋ก ์์๊ฐ ๋ฐ๋๋ฏ๋ก Finished=11์
๋๋ค. state As TaskState๋ 10์ ๋ฐ์ต๋๋ค. Main์ CStr๋ก ์ซ์๋ฅผ ๋ณํํ์ฌ String "0:1:10:11"์ ๋ฐํํฉ๋๋ค. ์ด๋ฆ์ ์์ ์ ์ํ๋ก ๋ฐ๊ฟ ์ ์๊ณ ์ ์ธ ์์ฒด๋ ์ ์ฐจ๋ฅผ ์์ํ์ง ์์ต๋๋ค.
Option Explicit On
Enum TaskState As Integer
Idle
Queued
Working = 10
Finished
End Enum
Sub Main()
Dim state As TaskState = TaskState.Working
Return CStr(TaskState.Idle) & ":" & CStr(TaskState.Queued) & ":" & CStr(state) & ":" & CStr(TaskState.Finished)
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
Idle=0๊ณผ Queued=1์ ์๋์ ๋๋ค. Working=10์ผ๋ก ์์๊ฐ ๋ฐ๋๋ฏ๋ก Finished=11์ ๋๋ค. state As TaskState๋ 10์ ๋ฐ์ต๋๋ค. Main์ CStr๋ก ์ซ์๋ฅผ ๋ณํํ์ฌ String "0:1:10:11"์ ๋ฐํํฉ๋๋ค. ์ด๋ฆ์ ์์ ์ ์ํ๋ก ๋ฐ๊ฟ ์ ์๊ณ ์ ์ธ ์์ฒด๋ ์ ์ฐจ๋ฅผ ์์ํ์ง ์์ต๋๋ค.
2. ๋ชจ๋ ์ํ ์จ๊ธฐ๊ธฐ
# Controller.Mode๋ Controller ๋ด๋ถ ์ ์ฉ์
๋๋ค. NextMode๋ distance ByVal As Integer๋ฅผ ๋ฐ์ ํธ์ถ์ ์ธ์๋ฅผ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค. distance<=1์ด๋ฉด Arrived=5, ์๋๋ฉด Walking=4์ด๋ฉฐ state๋ 0๋ถํฐ ์์ํฉ๋๋ค. Main์ 3๊ณผ 1์ ์ ๋ฌํด 4์ 5๋ฅผ ๋ฐ๊ณ Integer 45๋ฅผ ๋ฐํํฉ๋๋ค. ์บ๋ฆญํฐ ์ด๋์ ์๊ณ distance๋ ์์ ์
๋ ฅ์
๋๋ค. ์ธ๋ถ์์๋ Controller.NextMode๋ง ํธ์ถํ ์ ์์ผ๋ฉฐ Controller.Mode.Arrived๋ ์ฝ์ ์ ์์ต๋๋ค.
Option Explicit On
Module Controller
Private Enum Mode
Idle
Walking = 4
Arrived
End Enum
Public Function NextMode(ByVal distance As Integer) As Integer
Dim state As Mode
If distance <= 1 Then
state = Mode.Arrived
Else
state = Mode.Walking
End If
Return state
End Function
End Module
Sub Main()
Dim farState = Controller.NextMode(3)
Dim nearState = Controller.NextMode(1)
Return farState * 10 + nearState
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
Controller.Mode๋ Controller ๋ด๋ถ ์ ์ฉ์ ๋๋ค. NextMode๋ distance ByVal As Integer๋ฅผ ๋ฐ์ ํธ์ถ์ ์ธ์๋ฅผ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค. distance<=1์ด๋ฉด Arrived=5, ์๋๋ฉด Walking=4์ด๋ฉฐ state๋ 0๋ถํฐ ์์ํฉ๋๋ค. Main์ 3๊ณผ 1์ ์ ๋ฌํด 4์ 5๋ฅผ ๋ฐ๊ณ Integer 45๋ฅผ ๋ฐํํฉ๋๋ค. ์บ๋ฆญํฐ ์ด๋์ ์๊ณ distance๋ ์์ ์ ๋ ฅ์ ๋๋ค. ์ธ๋ถ์์๋ Controller.NextMode๋ง ํธ์ถํ ์ ์์ผ๋ฉฐ Controller.Mode.Arrived๋ ์ฝ์ ์ ์์ต๋๋ค.
3. ์ํ ๋ณ๊ฒฝ ํ Boolean ๋ฐํ
# ์ด์ Integer Const์ธ FirstState=2๋ก Idle=2, Working=3, Finished=4๊ฐ ๋ฉ๋๋ค. Advance๋ state๋ฅผ ByRef๋ก ๋ฐ์ Main์ ๋ณ์๋ฅผ ๋ฐ๊ฟ๋๋ค. With Mode๋ ์ด๋ฆ์ ์ค์ด๊ณ Select Case๋ ์ ํ์ ์ ํํฉ๋๋ค. ๋ ๋ฒ ํธ์ถํ๋ฉด 2โ3โ4์
๋๋ค. IsFinal์ ByVal ๋ณต์ฌ๋ณธ์ Finished์ ๋น๊ตํ๋ฏ๋ก Main์ 1/True๋ฅผ ๋ฐํํฉ๋๋ค. ํ ๋ฒ ์ ํํ๋ค๋ฉด 0/False์
๋๋ค. Advance๋ฅผ ๋ค์ ํธ์ถํ๋ฉด "No next state" ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉฐ Mode ์์๋ ๋ฐ๋์ง ์์ต๋๋ค.
Option Explicit On
Const FirstState As Integer = 2
Enum Mode
Idle = FirstState
Working = Idle + 1
Finished
End Enum
Sub Advance(ByRef state As Mode)
With Mode
Select Case state
Case .Idle
state = .Working
Case .Working
state = .Finished
Case Else
Throw "No next state"
End Select
End With
End Sub
Function IsFinal(ByVal state As Mode) As Boolean
Return state = Mode.Finished
End Function
Sub Main()
Dim state As Mode = Mode.Idle
Advance(state)
Advance(state)
Return IsFinal(state)
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
์ด์ Integer Const์ธ FirstState=2๋ก Idle=2, Working=3, Finished=4๊ฐ ๋ฉ๋๋ค. Advance๋ state๋ฅผ ByRef๋ก ๋ฐ์ Main์ ๋ณ์๋ฅผ ๋ฐ๊ฟ๋๋ค. With Mode๋ ์ด๋ฆ์ ์ค์ด๊ณ Select Case๋ ์ ํ์ ์ ํํฉ๋๋ค. ๋ ๋ฒ ํธ์ถํ๋ฉด 2โ3โ4์ ๋๋ค. IsFinal์ ByVal ๋ณต์ฌ๋ณธ์ Finished์ ๋น๊ตํ๋ฏ๋ก Main์ 1/True๋ฅผ ๋ฐํํฉ๋๋ค. ํ ๋ฒ ์ ํํ๋ค๋ฉด 0/False์ ๋๋ค. Advance๋ฅผ ๋ค์ ํธ์ถํ๋ฉด "No next state" ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉฐ Mode ์์๋ ๋ฐ๋์ง ์์ต๋๋ค.