API Basic Structure ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Structure / New / fields
ClassicUO โข Basic
Structure๋ X, Y, Z ๊ฐ์ ํ์ ์ง์ ํ๋๋ฅผ ํ๋์ ๊ฐ์ผ๋ก ๋ฌถ์ต๋๋ค. ์ด ์์ง์ ๊ฐ์ ๋ณต์ฌํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ง์ํ๋ฉฐ, VB.NET์ Structure ์ ์ฒด ๊ธฐ๋ฅ์ ๊ตฌํํ ๊ฒ์ ์๋๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
[Public | Private] Structure TypeName
[Public | Dim | VAR] field As FieldType
End Structure
Dim value As TypeName
Dim value = New TypeName()
copy = value
value.field = expression
Sub Change(ByRef value As TypeName)
Function Copy(ByVal value As TypeName) As TypeName
๋งค๊ฐ๋ณ์
TypeName / Public / Privateโ ํ์ผ ์์ค ๋๋ Module ์์ ์ ์ธํ๋ ๊ณ ์ ํ ๋จ์ ํ์ ์ด๋ฆ์ ๋๋ค. ๊ธฐ๋ณธ์ Public์ ๋๋ค. Private๋ Module ๋ด๋ถ์์๋ง ํ์ฉ๋๋ฉฐ ์ธ๋ถ์์๋ ํด๋น ํ์ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ณต๊ฐ ๋ชจ๋ ํ์์ ModuleName.TypeName์ผ๋ก ์ง์ ํฉ๋๋ค. ํค์๋์ ํ๋ ์ด๋ฆ์ ๋ฒ์ญํ์ง ์์ต๋๋ค.field / FieldTypeโ ๊ณ ์ ํ ํ๋ ์ด๋ฆ, As, ์ง์๋๋ ์ค์นผ๋ผ ํ์ยทEnumยท๋ค๋ฅธ Structure๋ฅผ ์ง์ ํฉ๋๋ค. ํ๋๋ ๊ณต๊ฐ์ด๋ฉฐ Public, Dim, VAR๋ฅผ ์ธ ์ ์์ต๋๋ค. ํ์: Integer/Long/Short/Byte, Single/Double/Decimal, String, Boolean/Bool, Object/Variant. ์ ์ ๋ณ์นญ์ ๋ชจ๋ ๋ถํธ ์๋ 32๋นํธ์ ๋๋ค. ์ค์ฒฉ ๊ตฌ์กฐ์ ์ํ์ ๊ธ์ง๋ฉ๋๋ค.Dim / Newโ Dim value As TypeName๊ณผ New TypeName()์ ์ฌ์ฉ์ ์ฝ๋๋ฅผ ํธ์ถํ์ง ์๊ณ ๊ธฐ๋ณธ๊ฐ์ ๋ง๋ญ๋๋ค. New์ ๊ดํธ๋ ๋น์์ผ ํฉ๋๋ค. X/Y/Z ์ธ์๋ฅผ ๋ฐ์ง ์์ผ๋ฏ๋ก ์์ฑ ํ ํ๋์ ๋์ ํฉ๋๋ค. Dim copy = value๋ ์์ ๊ฐ์ ์ป์ต๋๋ค. UO. ์ ๋์ฌ๋ ํ์ ์์ต๋๋ค.value.field / copyโ ์ ์ผ๋ก ํ๋๋ฅผ ์ฝ๊ณ ์ฐ๋ฉฐ route.Start.X ๊ฐ์ ์ค์ฒฉ ๊ฒฝ๋ก๋ ๊ฐ๋ฅํฉ๋๋ค. ์ฐ๊ธฐ ์ ํ๋ ํ์์ ํ์ธํ๊ณ ์ด๋ฅผ ํฌํจํ ๊ฐ์ ๊ต์ฒดํฉ๋๋ค. copy = value๋ ์ค์นผ๋ผ์ ์ค์ฒฉ ๊ตฌ์กฐ ๊ฐ์ ๋ณต์ฌํ๋ฏ๋ก copy.X ๋ณ๊ฒฝ์ด value.X๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค. ๊ตฌ์กฐ ํ์์ด ํธํ๋์ด์ผ ํฉ๋๋ค.ByVal / ByRefโ ByVal์ ๊ฐ์ ๋ณต์ฌ๋ณธ์ ์ ๋ฌํฉ๋๋ค. ByRef๋ ์ง์ ์ ๋ณต์ฌํ๊ณ ์ข ๋ฃ ์ ํธ์ถ์์ ๋ค์ ๊ธฐ๋กํ๋ฉฐ, ์ฐ๊ธฐ ๊ฐ๋ฅํ ํ๋ ์ธ์๋ ์ง์ํฉ๋๋ค. ํ์ ์๋ฅผ ๋ช ์ํ์ธ์. ์๋ตํ๋ฉด ๊ธฐ์กด Basic ๊ท์น์ด ์ ์ฉ๋ฉ๋๋ค. Return์ผ๋ก ๊ตฌ์กฐ๋ฅผ ๋ฐํํ๊ณ Function์ As TypeName์ ์ ์ธํ ์ ์์ต๋๋ค.
๋ฐํ๊ฐ
์ ์ธ๊ณผ ๋์ ์๋ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค(Unit). New์ ํด๋น ํจ์๋ ๊ตฌ์กฐ ๊ฐ์ ๋ฐํํ๋ฉฐ ์คํ ๊ด์ฐฐ์์๋ Object๋ก ํํ๋๊ณ ํ์ ๋ด์ฉ์ ์ ์ธ๋ ํ์ ์ด๋ฆ์ด ํฌํจ๋ฉ๋๋ค. ์ขํ๋ ์๋์ด๋ฉฐ Boolean ํ๋๊ทธ๊ฐ ์๋๋๋ค. =์ <>๋ 1/True ๋๋ 0/False๋ฅผ ๋ฐํํฉ๋๋ค. ์์ ์ String ๊ฒฐ๊ณผ: "1445:1447:1690:0", "10:15:24", "2:4:2:2".
๋์
- ์ ์ธ์ ์ด๊ธฐํ ์ ์คํ ์ ์ ๊ฒ์ฌํฉ๋๋ค. ์คํฌ๋ฆฝํธ๋น ์ต๋ 256๊ฐ ํ์, ํ์๋ง๋ค 1โ256๊ฐ ํ๋, ์ค์ฒฉ์ ์ต๋ 32๋จ๊ณ์ ๋๋ค. ์ค๋ณตยท์ ์ ์๋ ํ๋ ํ์, ์ํ, ์ ํ ์ด๊ณผ๋ SC030์ ๋ฐ์์ํต๋๋ค. ์ด๋ฆ ๋ฐ์ธ๋ฉ ๋จ๊ณ์์ Private๋ฅผ ๊ฒ์ฌํฉ๋๋ค.
- ๊ธฐ๋ณธ ํ๋ ๊ฐ: ์ ์/Enum 0, ์ค์ 0, Boolean 0/False, String ๋น ๋ฌธ์์ด, Object/Variant๋ ๋์ ์ Unit. ์ค์ฒฉ ๊ตฌ์กฐ๋ ์์ฒด ๊ธฐ๋ณธ๊ฐ์ ๊ฐ์ต๋๋ค. ํ๋ ์ ์ธ ์์ ์ด๊ธฐํ๋ ์ง์๋์ง ์์ผ๋ฏ๋ก ์์ฑ ํ ๋์ ํ์ธ์.
- Object์ ๋ฐฐ์ด ํ๋๋ ๋ณต์ฌ ์ ์ฐธ์กฐ๋ฅผ ์ ์งํ๋ฏ๋ก ๋ ๋ณต์ฌ๋ณธ์ด List, Dictionary ๋๋ ๋ฐฐ์ด์ ๊ณต์ ํ ์ ์์ต๋๋ค. ์ค์นผ๋ผ์ ์ค์ฒฉ ๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ณ๊ฒฝ๋์ง๋ง ๊ณต์ ์ปฌ๋ ์ ์ ๋ด์ฉ ๋ณ๊ฒฝ์ ์์ชฝ์ ๋ณด์ ๋๋ค. List๋ ์ถ๊ฐ ๋น์์ ๊ตฌ์กฐ ๊ฐ์ ์ ์ฅํฉ๋๋ค.
- =๋ ๋์ผํ ์ ์ธ ํ์๊ณผ ๋์ ํ๋๋ฅผ ๋น๊ตํ๋ฉฐ <>๋ ๋ฐ๋ ๊ฒฐ๊ณผ์ ๋๋ค. ์ฐธ์กฐ ํ๋๋ ๋์ผ์ฑ์ผ๋ก ๋น๊ตํฉ๋๋ค. ์ด๋ ์์ง ํ์ฅ์ด๋ฉฐ ๋ชจ๋ VB.NET ๊ตฌ์กฐ์ =๊ฐ ์ง์๋๋ค๋ ๋ป์ ์๋๋๋ค. ์ ์ฅ๋ ํด์์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์์ผ๋ก ๊ณต์ ์ค์ฒฉ ๊ฐ์ ๋ฐ๋ณตํด์ ํผ์น๋ ์์ ์ ๋ฐฉ์งํฉ๋๋ค.
- ์ง์ ๋ฒ์: ๊ณต๊ฐ ํ์ ์ง์ ๋ฐ์ดํฐ ํ๋, Module ๊ฐ์์ฑ, New(), ๋์ , ๋งค๊ฐ๋ณ์์ ๋ฐํ๊ฐ. ๋ด๋ถ ๋ฉ์๋, ์ฌ์ฉ์ ์์ฑ์, ํ๋ ์ด๊ธฐํ, ์์ฑ, ์์, ๋น๊ณต๊ฐ ํ๋๋ ์ง์ํ์ง ์์ต๋๋ค. WITH .field์ array[index].field๋ ์ง์ํ์ง ์์ต๋๋ค. ์์๋ฅผ ๋ณ์๋ก ์ฝ๊ณ ์์ ํ ๋ค ๋ค์ ์ ์ฅํ์ธ์. ์ ์ธ์ Include ํ์ผ์ ๋ ์ ์์ต๋๋ค.
์์
1. ์ขํ์ ๋ ๋ฆฝ์ ์ธ ๋ณต์ฌ๋ณธ
# original์ X=1445, Y=1690์ด๋ฉฐ Z๋ 0์
๋๋ค. copy์ ๊ฐ์ ๋ณต์ฌํ๊ณ copy.X += 2๋ก ๋ณต์ฌ๋ณธ๋ง ๋ณ๊ฒฝํฉ๋๋ค. New Position()์ Z=0์ธ empty๋ฅผ ๋ง๋ญ๋๋ค. ๊ฒฐ๊ณผ๋ 1445:1447:1690:0์
๋๋ค. ์ ์ฅ๋ ์ขํ๋ฅผ ๋ค๋ฃจ๋ฉฐ ์บ๋ฆญํฐ๋ฅผ ์ด๋์ํค๋ ์คํฌ๋ฆฝํธ๋ ์๋๋๋ค.
Option Explicit On
Structure Position
Public X As Integer
Public Y As Integer
Public Z As Integer
End Structure
Sub Main()
Dim original As Position
original.X = 1445
original.Y = 1690
Dim copy = original
copy.X += 2
Dim empty = New Position()
Return CStr(original.X) & ":" & CStr(copy.X) & ":" & CStr(copy.Y) & ":" & CStr(empty.Z)
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
original์ X=1445, Y=1690์ด๋ฉฐ Z๋ 0์ ๋๋ค. copy์ ๊ฐ์ ๋ณต์ฌํ๊ณ copy.X += 2๋ก ๋ณต์ฌ๋ณธ๋ง ๋ณ๊ฒฝํฉ๋๋ค. New Position()์ Z=0์ธ empty๋ฅผ ๋ง๋ญ๋๋ค. ๊ฒฐ๊ณผ๋ 1445:1447:1690:0์ ๋๋ค. ์ ์ฅ๋ ์ขํ๋ฅผ ๋ค๋ฃจ๋ฉฐ ์บ๋ฆญํฐ๋ฅผ ์ด๋์ํค๋ ์คํฌ๋ฆฝํธ๋ ์๋๋๋ค.
2. ์ค์ฒฉ ๊ฒฝ๋ก, ByVal๊ณผ ByRef
# Route์๋ Position ํ์์ Start์ Finish๊ฐ ์์ต๋๋ค. Shift(point ByVal, dx ByVal)๋ ๋ณต์ฌ๋ณธ์ X์ dx๋ฅผ ๋ํ๊ณ Position์ ๋ฐํํฉ๋๋ค. point:=route.Start, dx:=5์ด๋ฉด shifted.X=15์ด๊ณ Start.X๋ 10์
๋๋ค. Advance(route ByRef, dx ByVal)๋ Finish.X์ 4๋ฅผ ๋ํ ๋ค Route๋ฅผ ๋ค์ ๊ธฐ๋กํ์ฌ 24๋ฅผ ๋ง๋ญ๋๋ค. Main ๊ฒฐ๊ณผ๋ 10:15:24์ด๋ฉฐ ๋ชจ๋ ๋ณด์กฐ ํ๋ก์์ ๊ฐ ํ์๋์ด ์์ต๋๋ค.
Option Explicit On
Structure Position
Public X As Integer
Public Y As Integer
End Structure
Structure Route
Public Start As Position
Public Finish As Position
End Structure
Function Shift(ByVal point As Position, ByVal dx As Integer) As Position
point.X += dx
Return point
End Function
Sub Advance(ByRef route As Route, ByVal dx As Integer)
route.Finish.X += dx
End Sub
Sub Main()
Dim route As Route
route.Start.X = 10
route.Finish.X = 20
Dim shifted = Shift(point:=route.Start, dx:=5)
Advance(route:=route, dx:=4)
Return CStr(route.Start.X) & ":" & CStr(shifted.X) & ":" & CStr(route.Finish.X)
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
Route์๋ Position ํ์์ Start์ Finish๊ฐ ์์ต๋๋ค. Shift(point ByVal, dx ByVal)๋ ๋ณต์ฌ๋ณธ์ X์ dx๋ฅผ ๋ํ๊ณ Position์ ๋ฐํํฉ๋๋ค. point:=route.Start, dx:=5์ด๋ฉด shifted.X=15์ด๊ณ Start.X๋ 10์ ๋๋ค. Advance(route ByRef, dx ByVal)๋ Finish.X์ 4๋ฅผ ๋ํ ๋ค Route๋ฅผ ๋ค์ ๊ธฐ๋กํ์ฌ 24๋ฅผ ๋ง๋ญ๋๋ค. Main ๊ฒฐ๊ณผ๋ 10:15:24์ด๋ฉฐ ๋ชจ๋ ๋ณด์กฐ ํ๋ก์์ ๊ฐ ํ์๋์ด ์์ต๋๋ค.
3. ์ ์ฅํ ๊ฐ๊ณผ ๊ณต์ ์ปฌ๋ ์
# Entry์๋ ๊ฐ ํ๋ Point์ Object ํ๋ Items๊ฐ ์์ต๋๋ค. first.Point.X=2์ด๋ฉฐ Items๋ ๋ฌธ์์ด ํ๋๋ฅผ ๊ฐ์ง List()์
๋๋ค. snapshots.Add(first)๋ ๊ฐ์ ์ ์ฅํฉ๋๋ค. second=first ํ second.Point.X=4๋ก ๋ฐ๊ฟ๋ ์ ์ฅ๋ 2๋ ์ ์ง๋ฉ๋๋ค. second.Items.Add("ingot")๋ ๊ณต์ List๋ฅผ ๋ฐ๊พธ๋ฏ๋ก first.Items.Count()=2์
๋๋ค. saved=snapshots[0]์ผ๋ก ์์ ํ๋๋ฅผ ์ฝ์ต๋๋ค. ๊ฒฐ๊ณผ: 2:4:2:2.
Option Explicit On
Structure Position
Public X As Integer
End Structure
Structure Entry
Public Point As Position
Public Items As Object
End Structure
Sub Main()
Dim first As Entry
first.Point.X = 2
first.Items = List()
first.Items.Add("ore")
Dim snapshots = List()
snapshots.Add(first)
Dim second = first
second.Point.X = 4
second.Items.Add("ingot")
Dim saved = snapshots[0]
Return CStr(first.Point.X) & ":" & CStr(second.Point.X) & ":" & CStr(saved.Point.X) & ":" & CStr(first.Items.Count())
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
Entry์๋ ๊ฐ ํ๋ Point์ Object ํ๋ Items๊ฐ ์์ต๋๋ค. first.Point.X=2์ด๋ฉฐ Items๋ ๋ฌธ์์ด ํ๋๋ฅผ ๊ฐ์ง List()์ ๋๋ค. snapshots.Add(first)๋ ๊ฐ์ ์ ์ฅํฉ๋๋ค. second=first ํ second.Point.X=4๋ก ๋ฐ๊ฟ๋ ์ ์ฅ๋ 2๋ ์ ์ง๋ฉ๋๋ค. second.Items.Add("ingot")๋ ๊ณต์ List๋ฅผ ๋ฐ๊พธ๋ฏ๋ก first.Items.Count()=2์ ๋๋ค. saved=snapshots[0]์ผ๋ก ์์ ํ๋๋ฅผ ์ฝ์ต๋๋ค. ๊ฒฐ๊ณผ: 2:4:2:2.
๋ด๋ถ ํจ์: ํธ์ถ๋ถํฐ ๊ฒฐ๊ณผ๊น์ง
Structure๋ X, Y, Z ๊ฐ์ ํ์ ์ง์ ํ๋๋ฅผ ํ๋์ ๊ฐ์ผ๋ก ๋ฌถ์ต๋๋ค. ์ด ์์ง์ ๊ฐ์ ๋ณต์ฌํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ง์ํ๋ฉฐ, VB.NET์ Structure ์ ์ฒด ๊ธฐ๋ฅ์ ๊ตฌํํ ๊ฒ์ ์๋๋๋ค.
1. Build / PrepareDefault
์ ์ธ์ ์ด๊ธฐํ ์ ์คํ ์ ์ ๊ฒ์ฌํฉ๋๋ค. ์คํฌ๋ฆฝํธ๋น ์ต๋ 256๊ฐ ํ์, ํ์๋ง๋ค 1โ256๊ฐ ํ๋, ์ค์ฒฉ์ ์ต๋ 32๋จ๊ณ์ ๋๋ค. ์ค๋ณตยท์ ์ ์๋ ํ๋ ํ์, ์ํ, ์ ํ ์ด๊ณผ๋ SC030์ ๋ฐ์์ํต๋๋ค. ์ด๋ฆ ๋ฐ์ธ๋ฉ ๋จ๊ณ์์ Private๋ฅผ ๊ฒ์ฌํฉ๋๋ค.
declarations -> field types -> visibility -> cycle/depth checks -> immutable defaults
ํ๋ก์ ํธ ์์ค: external/InjectionScript/src/InjectionScript/Runtime/StructureCatalog.cs; ํจ์ Build / PrepareDefault.
2. VisitNewStructure
Dim value As TypeName๊ณผ New TypeName()์ ์ฌ์ฉ์ ์ฝ๋๋ฅผ ํธ์ถํ์ง ์๊ณ ๊ธฐ๋ณธ๊ฐ์ ๋ง๋ญ๋๋ค. New์ ๊ดํธ๋ ๋น์์ผ ํฉ๋๋ค. X/Y/Z ์ธ์๋ฅผ ๋ฐ์ง ์์ผ๋ฏ๋ก ์์ฑ ํ ํ๋์ ๋์ ํฉ๋๋ค. Dim copy = value๋ ์์ ๊ฐ์ ์ป์ต๋๋ค. UO. ์ ๋์ฌ๋ ํ์ ์์ต๋๋ค.
resolve TypeName -> prepared default value; no procedure call
ํ๋ก์ ํธ ์์ค: external/InjectionScript/src/InjectionScript/Runtime/Interpreter.cs; ํจ์ VisitNewStructure.
3. WithField / SetVar
์ ์ผ๋ก ํ๋๋ฅผ ์ฝ๊ณ ์ฐ๋ฉฐ route.Start.X ๊ฐ์ ์ค์ฒฉ ๊ฒฝ๋ก๋ ๊ฐ๋ฅํฉ๋๋ค. ์ฐ๊ธฐ ์ ํ๋ ํ์์ ํ์ธํ๊ณ ์ด๋ฅผ ํฌํจํ ๊ฐ์ ๊ต์ฒดํฉ๋๋ค. copy = value๋ ์ค์นผ๋ผ์ ์ค์ฒฉ ๊ตฌ์กฐ ๊ฐ์ ๋ณต์ฌํ๋ฏ๋ก copy.X ๋ณ๊ฒฝ์ด value.X๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค. ๊ตฌ์กฐ ํ์์ด ํธํ๋์ด์ผ ํฉ๋๋ค.
resolve path -> coerce field -> replace path -> assign new root value
ํ๋ก์ ํธ ์์ค: external/InjectionScript/src/InjectionScript/Runtime/ObjectTypes/StructureObject.cs; ํจ์ WithField / SetVar.
4. CreateArgumentWriter
ByVal์ ๊ฐ์ ๋ณต์ฌ๋ณธ์ ์ ๋ฌํฉ๋๋ค. ByRef๋ ์ง์ ์ ๋ณต์ฌํ๊ณ ์ข ๋ฃ ์ ํธ์ถ์์ ๋ค์ ๊ธฐ๋กํ๋ฉฐ, ์ฐ๊ธฐ ๊ฐ๋ฅํ ํ๋ ์ธ์๋ ์ง์ํฉ๋๋ค. ํ์ ์๋ฅผ ๋ช ์ํ์ธ์. ์๋ตํ๋ฉด ๊ธฐ์กด Basic ๊ท์น์ด ์ ์ฉ๋ฉ๋๋ค. Return์ผ๋ก ๊ตฌ์กฐ๋ฅผ ๋ฐํํ๊ณ Function์ As TypeName์ ์ ์ธํ ์ ์์ต๋๋ค.
ByVal: value copy; ByRef: value copy -> callee -> caller slot write-back
ํ๋ก์ ํธ ์์ค: external/InjectionScript/src/InjectionScript/Runtime/Interpreter.cs; ํจ์ CreateArgumentWriter.
5. ValueEquals
=๋ ๋์ผํ ์ ์ธ ํ์๊ณผ ๋์ ํ๋๋ฅผ ๋น๊ตํ๋ฉฐ <>๋ ๋ฐ๋ ๊ฒฐ๊ณผ์ ๋๋ค. ์ฐธ์กฐ ํ๋๋ ๋์ผ์ฑ์ผ๋ก ๋น๊ตํฉ๋๋ค. ์ด๋ ์์ง ํ์ฅ์ด๋ฉฐ ๋ชจ๋ VB.NET ๊ตฌ์กฐ์ =๊ฐ ์ง์๋๋ค๋ ๋ป์ ์๋๋๋ค. ์ ์ฅ๋ ํด์์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์์ผ๋ก ๊ณต์ ์ค์ฒฉ ๊ฐ์ ๋ฐ๋ณตํด์ ํผ์น๋ ์์ ์ ๋ฐฉ์งํฉ๋๋ค.
type identity -> cached hash -> distinct field pairs; reference members keep identity
ํ๋ก์ ํธ ์์ค: external/InjectionScript/src/InjectionScript/Runtime/ObjectTypes/StructureObject.cs; ํจ์ ValueEquals.
์ ์ธ๊ณผ ๋์ ์๋ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค(Unit). New์ ํด๋น ํจ์๋ ๊ตฌ์กฐ ๊ฐ์ ๋ฐํํ๋ฉฐ ์คํ ๊ด์ฐฐ์์๋ Object๋ก ํํ๋๊ณ ํ์ ๋ด์ฉ์ ์ ์ธ๋ ํ์ ์ด๋ฆ์ด ํฌํจ๋ฉ๋๋ค. ์ขํ๋ ์๋์ด๋ฉฐ Boolean ํ๋๊ทธ๊ฐ ์๋๋๋ค. =์ <>๋ 1/True ๋๋ 0/False๋ฅผ ๋ฐํํฉ๋๋ค. ์์ ์ String ๊ฒฐ๊ณผ: "1445:1447:1690:0", "10:15:24", "2:4:2:2".