API Basic ParamArray ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
ParamArray
ClassicUO โข Basic
๋งค๊ฐ๋ณ์๋ SUB/FUNCTION์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค. ByRef๋ ๋ณ๊ฒฝ ๊ฐ์ ํธ์ถ์์๊ฒ ๊ธฐ๋กํ๊ณ ByVal์ ํธ์ถ์์ ๋ณ์๋ฅผ ๋ณด์กดํฉ๋๋ค. Optional์ ์๋ตํ ์ธ์๋ฅผ ๋ณด์ถฉํ๊ณ ParamArray๋ ๋๋จธ์ง ์ธ์๋ฅผ ๋ชจ์๋๋ค. ํธ์ถ ๋ช ๋ น์ด ์๋๋ผ ์ ์ธ ํ์ ์์ ๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
Function Sum(ParamArray values())
Sum()
Sum(2, 3, 4)
Sum(existingArray)
๋งค๊ฐ๋ณ์
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. ๋น์ด ์๊ฑฐ๋ ์ฑ์์ง ์ธ์
# Sum()์ ๋น ๋ฐฐ์ด๋ก 0์, Sum(2,3,4)๋ ์ธ ๊ฐ์ผ๋ก 9๋ฅผ ๋ฐํํฉ๋๋ค. For Each๊ฐ ๊ฐ ๊ฐ์ ๋ฐฉ๋ฌธํฉ๋๋ค. Main์ Integer 9๋ฅผ ๋ฐํํฉ๋๋ค.
Option Explicit On
Function Sum(ParamArray values())
Var total = 0
For Each value In values
total += value
Next
Return total
End Function
Sub Main()
Return Sum() + Sum(2, 3, 4)
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
Sum()์ ๋น ๋ฐฐ์ด๋ก 0์, Sum(2,3,4)๋ ์ธ ๊ฐ์ผ๋ก 9๋ฅผ ๋ฐํํฉ๋๋ค. For Each๊ฐ ๊ฐ ๊ฐ์ ๋ฐฉ๋ฌธํฉ๋๋ค. Main์ Integer 9๋ฅผ ๋ฐํํฉ๋๋ค.
2. ๊ธฐ์กด ๋ฐฐ์ด ์ ๋ฌ
# values์๋ 2์ 5๊ฐ ์์ต๋๋ค. Forward๋ ์ถ๊ฐ ํฌ์ฅ ์์ด Sum์ ๋ฐฐ์ด์ ์ ๋ฌํฉ๋๋ค. Sum์ ํฉ๊ณ Integer 7์ ๋ฐํํฉ๋๋ค.
Option Explicit On
Function Sum(ParamArray values())
Var total = 0
For Each value In values
total += value
Next
Return total
End Function
Function Forward(ParamArray values())
Return Sum(values)
End Function
Sub Main()
Dim values[1]
values[0] = 2
values[1] = 5
Return Forward(values)
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
values์๋ 2์ 5๊ฐ ์์ต๋๋ค. Forward๋ ์ถ๊ฐ ํฌ์ฅ ์์ด Sum์ ๋ฐฐ์ด์ ์ ๋ฌํฉ๋๋ค. Sum์ ํฉ๊ณ Integer 7์ ๋ฐํํฉ๋๋ค.
3. ์ค์นผ๋ผ์ ์ ๊ณต๋ ๋ฐฐ์ด
# SetFirst(first,second)๋ ์ ๋ฐฐ์ด์ ์์ ํ๋ฏ๋ก first=2์ second=3์ด ์ ์ง๋ฉ๋๋ค. SetFirst(packed)๋ ๊ณต์ packed[0]์ 4์์ 9๋ก ๋ฐ๊ฟ๋๋ค. Main์ 2*100+3*10+9, Integer 239๋ฅผ ๋ฐํํฉ๋๋ค.
Option Explicit On
Sub SetFirst(ParamArray values())
If GetArrayLength(values) > 0 Then
values[0] = 9
End If
End Sub
Sub Main()
Var first = 2
Var second = 3
SetFirst(first, second)
Dim packed[0]
packed[0] = 4
SetFirst(packed)
Return first * 100 + second * 10 + packed[0]
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
SetFirst(first,second)๋ ์ ๋ฐฐ์ด์ ์์ ํ๋ฏ๋ก first=2์ second=3์ด ์ ์ง๋ฉ๋๋ค. SetFirst(packed)๋ ๊ณต์ packed[0]์ 4์์ 9๋ก ๋ฐ๊ฟ๋๋ค. Main์ 2100+310+9, Integer 239๋ฅผ ๋ฐํํฉ๋๋ค.