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".


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

Basic