API Basic ByRef ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
ByRef
ClassicUO โข Basic
๋งค๊ฐ๋ณ์๋ SUB/FUNCTION์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค. ByRef๋ ๋ณ๊ฒฝ ๊ฐ์ ํธ์ถ์์๊ฒ ๊ธฐ๋กํ๊ณ ByVal์ ํธ์ถ์์ ๋ณ์๋ฅผ ๋ณด์กดํฉ๋๋ค. Optional์ ์๋ตํ ์ธ์๋ฅผ ๋ณด์ถฉํ๊ณ ParamArray๋ ๋๋จธ์ง ์ธ์๋ฅผ ๋ชจ์๋๋ค. ํธ์ถ ๋ช ๋ น์ด ์๋๋ผ ์ ์ธ ํ์ ์์ ๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
Sub Adjust(ByRef amount, ByVal increment)
Adjust(amount, 3)
Bump(items[index])
Function name(ByRef value As type)
๋งค๊ฐ๋ณ์
name / As typeโ name / As type: ๋งค๊ฐ๋ณ์ ์ด๋ฆ๊ณผ ์ ํ์ ์ธ As ์ ๋ ฅ ํ์ ๋ณํ์ ๋๋ค. ์์น ๋๋ name:=value๋ก ์ฐ๊ฒฐํ๋ฉฐ ํ์ ์๋ ์ ์ธ์ ์๋๋ค. Basic.NamedArguments๋ฅผ ์ฐธ๊ณ ํ์ธ์.ByRefโ ByRef: ์ฐ๊ธฐ ๊ฐ๋ฅํ ๋ณ์ ๋๋ ๊ธฐ์กด ์ธ๋ฑ์ค ์์์ ๋๋ค. ์ด ์์ง์ ByVal์ด ์์ด๋ ๊ฐ์ ๋ค์ ๊ธฐ๋กํ๋ฏ๋ก VB.NET ๊ธฐ๋ณธ๊ฐ๊ณผ ๋ค๋ฆ ๋๋ค. ๋ฆฌํฐ๋ด, ์์, ๊ณ์ฐ์์ ์์ ๊ฐ์ ๋๋ค.ByValโ ByVal: ๊ฐ์ ์ง์ญ ๋ณต์ฌ๋ณธ์ ๋๋ค. ๋งค๊ฐ๋ณ์์ ๋์ ํด๋ ํธ์ถ์์ ๋ณ์๋ฅผ ๊ต์ฒดํ์ง ์์ต๋๋ค. ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด๋ ์ฐธ์กฐ๋ฅผ ๊ณต์ ํ๋ฉฐ ๊น์ ๋ณต์ฌ๊ฐ ์๋๋๋ค.Optional / defaultValueโ Optional / defaultValue: ๋ง์ง๋ง ์ธ์๋ฅผ ์๋ตํ๋ฉด = ๋ค์ ์์ ๊ณ์ฐํฉ๋๋ค. ๋ช ์์ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ์ธ์. ์์ผ๋ฉด ์๋ต๋ ๋งค๊ฐ๋ณ์๋ ์ด๊ธฐํ๋์ง ์์ Unit์ ๋ฐ์ต๋๋ค.ParamArrayโ ParamArray values(): ๋ง์ง๋ง ๋งค๊ฐ๋ณ์๊ฐ ๋๋จธ์ง ๊ฐ์ 0๊ฐ ์ด์ ๋ฐ์ต๋๋ค. ๋ฐฐ์ด ํ๋๋ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ ์ค์นผ๋ผ ์ธ์๋ ์ ๋ฐฐ์ด๋ก ๋ฌถ์ต๋๋ค. GetArrayLength๋ ๊ธธ์ด๋ฅผ ๋ฐํํฉ๋๋ค.
๋ฐํ๊ฐ
ํ์ ์๋ ๊ฐ์ ๋ฐํํ์ง ์์ต๋๋ค. RETURN์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ก ์ค์ ํฉ๋๋ค. ByRef๋ ์ธ์๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด์ง ๋ฐํ๊ฐ์ด ์๋๋๋ค. RETURN ์๋ SUB๋ Unit์ ๋ง๋ญ๋๋ค. ์์ ์ซ์๋ ๊ณ์ฐ ๊ฒฐ๊ณผ์ด๋ฉฐ TRUE/FALSE ํ๋๊ทธ๊ฐ ์๋๋๋ค.
๋์
- ์ธ์๋ ์ผ์ชฝ๋ถํฐ ํ ๋ฒ์ฉ ๊ณ์ฐํฉ๋๋ค. ์ธ๋ฑ์ค ByRef๋ ์ปจํ ์ด๋์ ์ธ๋ฑ์ค/ํค๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ค๋ฅธ ์ธ์๊ฐ ์ปจํ ์ด๋ ๋ณ์๋ฅผ ์ฌ๋์ ํด๋ ๊ธฐ๋ก ์์น๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค.
- ์ง์ ํ ๋ ์ง์ญ ๋งค๊ฐ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค. ์ข ๋ฃ ์ ๋ด๋ถ FINALLY ๋ค์ ๋งค๊ฐ๋ณ์ ์์๋๋ก ByRef ๊ฐ์ ๊ธฐ๋กํ๋ฉฐ ๋ณธ๋ฌธ์์ ์ค๋ฅ๋ก ๋์ฌ ๋๋ ๊ฐ์ต๋๋ค. ๊ฐ์ ๋ณ์๋ฅผ ๋ ๋ฒ ์ ๋ฌํด๋ ์ง์ญ ๋งค๊ฐ๋ณ์๊ฐ ์ฆ์ ์ฐ๊ฒฐ๋์ง๋ ์์ต๋๋ค. ๋ง์ง๋ง ๊ธฐ๋ก์ด ๋จ์ต๋๋ค.
- ByVal์ ํธ์ถ์ ๋ณ์์ ๊ต์ฒด๋ฅผ ๋ง์ง๋ง ๊ณต์ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด ๋ด๋ถ ์์ ์ ํ์ฉํฉ๋๋ค. ReDim์ ์ ์ง์ญ ์ฐธ์กฐ๋ฅผ ๋ง๋ญ๋๋ค. ๋ ๋ฆฝ ๋ฐ์ดํฐ์๋ ๋ช ์์ ๋ณต์ฌ๊ฐ ํ์ํฉ๋๋ค.
- ์์น ์ธ์ ํธ์ถ: Optional์ ๋ค์์๋ถํฐ ์๋ตํ๋ฉฐ ์ผํ ์ฌ์ด์ ๋น ์ธ์๋ ์ง์ํ์ง ์์ต๋๋ค. ๊ธฐ๋ณธ์์ ์๋ตํ ๋๋ง๋ค ์คํํ๋ ์์ง ์์ด๋ฉฐ VB.NET ์์์ผ ํ์๊ฐ ์์ต๋๋ค. ์์น ์ธ์๋ฅผ ๋จผ์ ์ฐ๊ณ ์ฒซ ์ด๋ฆ ์๋ ์ธ์ ๋ค์๋ ๋ชจ๋ ์ด๋ฆ์ ์ง์ ํ์ธ์. ํ์ ๋งค๊ฐ๋ณ์๋ ์๋ตํ ์ ์์ต๋๋ค. ์๋ตํ ์คํฌ๋ฆฝํธ Optional์ ์ ๋ฌ ์์ ๊ณ์ฐํ ๋ค ์ ์ธ ์์๋๋ก ๊ธฐ๋ณธ ์์ ๊ณ์ฐํฉ๋๋ค. ๋ค์ดํฐ๋ธ ์ค๋ฒ๋ก๋๋ ๋ฑ๋ก๋ ์ด๋ฆ๊ณผ ๊ฐ์๋ง ์ฌ์ฉํ๋ฉฐ ์์ ๊ธฐ๋ณธ๊ฐ์ ์ถ๊ฐํ์ง ์์ต๋๋ค.
- ParamArray๋ ๋ฌถ์ธ ์ค์นผ๋ผ๋ฅผ ์๋ ๋ณ์์ ๋ค์ ์ฐ์ง ์์ต๋๋ค. ๋ฐฐ์ด์ ๋ช ์์ ์ผ๋ก ์ ๋ฌํ๋ฉด ์์ ๋ณ๊ฒฝ์ด ํธ์ถ์์๊ฒ ๋ณด์ ๋๋ค. ๋ค๋ฅธ ParamArray๋ก ์ ๋ฌํด๋ ์ค์ฒฉ์ ์ถ๊ฐํ์ง ์์ต๋๋ค.
- ์๋๋ฅผ ๋๋ฌ๋ด๋๋ก ByRef์ ByVal์ ๋ช ์ํ์ธ์. ์ด ๊ท์น์ ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉ์ ํ๋ก์์ ๋ฅผ ํธ์ถํ ๋ ์ ์ฉ๋๋ฉฐ ๋ด์ฅ ๋ช ๋ น ์ธ์๋ ๊ฐ ๋ฌธ์์ ์ค๋ช ํฉ๋๋ค.
- ParamArray๋ ์ด๋ฆ์ผ๋ก ์ ๋ฌํ ์ ์์ต๋๋ค. ์ด๋ฆ ์๋ ํธ์ถ์์๋ ๋น์ ๋ ์ ์์ง๋ง ์์๋ฅผ ์ ๋ฌํ๋ ค๋ฉด ๋ชจ๋ ์์น ์ธ์๋ก ํธ์ถํด์ผ ํฉ๋๋ค. ์ผํ ์ฌ์ด ๋น ์๋ฆฌ๋ ์ง์ํ์ง ์์ต๋๋ค. ์ด ๋ถ๋ถ์งํฉ์ ์์น ์ธ์ ์ฐ์ ์ด๋ฉฐ ์ต์ VB.NET์ ์์ ํผํฉ์ ์๋๋๋ค. ์ค๋ ๋๋ ๊ฒ์ ์ง์ฐ์ ์ถ๊ฐํ์ง ์์ต๋๋ค.
์์
1. ๋ณ์ ๋ณ๊ฒฝ
# Adjust๋ amount=5๋ฅผ ByRef๋ก, increment=3์ ByVal๋ก ๋ฐ์ต๋๋ค. amount๊ฐ 8์ด ๋์ด ๋ค์ ๊ธฐ๋ก๋ฉ๋๋ค. Main์ Integer 8์ ๋ฐํํ๊ณ Adjust๋ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค.
Option Explicit On
Sub Adjust(ByRef amount, ByVal increment)
amount += increment
End Sub
Sub Main()
Var amount = 5
Adjust(amount, 3)
Return amount
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
Adjust๋ amount=5๋ฅผ ByRef๋ก, increment=3์ ByVal๋ก ๋ฐ์ต๋๋ค. amount๊ฐ 8์ด ๋์ด ๋ค์ ๊ธฐ๋ก๋ฉ๋๋ค. Main์ Integer 8์ ๋ฐํํ๊ณ Adjust๋ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค.
2. ์ธ๋ฑ์ค๋ฅผ ํ ๋ฒ ๊ณ์ฐ
# items[0]=5์
๋๋ค. NextIndex๊ฐ calls๋ฅผ ๋๋ฆฌ๊ณ 0์ ๋ฐํํ๋ฉฐ Bump๊ฐ ์ ํ๋ ์์๋ฅผ 6์ผ๋ก ๋ฐ๊ฟ๋๋ค. ๋ค์ ๊ณ์ฐํ์ง ์์ calls=1์
๋๋ค. Main์ 6*100+1, Integer 601์ ๋ฐํํฉ๋๋ค.
Option Explicit On
Function NextIndex(ByRef calls)
calls += 1
Return 0
End Function
Sub Bump(ByRef amount)
amount += 1
End Sub
Sub Main()
Dim items[0]
items[0] = 5
Var calls = 0
Bump(items[NextIndex(calls)])
Return items[0] * 100 + calls
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
items[0]=5์ ๋๋ค. NextIndex๊ฐ calls๋ฅผ ๋๋ฆฌ๊ณ 0์ ๋ฐํํ๋ฉฐ Bump๊ฐ ์ ํ๋ ์์๋ฅผ 6์ผ๋ก ๋ฐ๊ฟ๋๋ค. ๋ค์ ๊ณ์ฐํ์ง ์์ calls=1์ ๋๋ค. Main์ 6*100+1, Integer 601์ ๋ฐํํฉ๋๋ค.
3. ํ ๋ณ์๋ฅผ ๋ ๋งค๊ฐ๋ณ์๋ก
# ๋ ๋ค 5๋ฅผ ๋ฐ์ต๋๋ค. first๋ 6, second๋ 7์ด ๋ฉ๋๋ค. ์ข
๋ฃ ์ value์ 6, ๊ทธ ๋ค์ 7์ ๊ธฐ๋กํฉ๋๋ค. Main์ 8์ด ์๋ Integer 7์ ๋ฐํํฉ๋๋ค.
Option Explicit On
Sub Change(ByRef first, ByRef second)
first += 1
second += 2
End Sub
Sub Main()
Var value = 5
Change(value, value)
Return value
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
๋ ๋ค 5๋ฅผ ๋ฐ์ต๋๋ค. first๋ 6, second๋ 7์ด ๋ฉ๋๋ค. ์ข ๋ฃ ์ value์ 6, ๊ทธ ๋ค์ 7์ ๊ธฐ๋กํฉ๋๋ค. Main์ 8์ด ์๋ Integer 7์ ๋ฐํํฉ๋๋ค.