API Basic Using ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Using / End Using
ClassicUO โข Basic
Using์ ๋ธ๋ก์ ๋ฒ์ด๋ ๋ ๋ค์ดํฐ๋ธ ๋ฆฌ์์ค๋ฅผ ๋ซ์ต๋๋ค. ๊ธฐ์กด ๋ณ์ ๋๋ ๋ฆฌ์์ค๋ฅผ ๋ฐํํ๋ ์์ ๋ฐ๋ ํ์์ ์ง์ํฉ๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
Dim resource = MemoryStream()
Using resource
statements
End Using
Using resourceExpression
statements
End Using
๋งค๊ฐ๋ณ์
resourceExpressionโ ์ง์ ์ ํ ๋ฒ ํ๊ฐํฉ๋๋ค. File(path), MemoryStream(), CreateTimer(...)์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ด๋จธ๋ฅผ ํด์ ํ๋ฉด ์๊ตฌ ์ ์งํฉ๋๋ค. Basic.Timers๋ฅผ ์ฐธ์กฐํ์ธ์. String, ์ซ์, List, Dictionary๋ ๋ณธ๋ฌธ ์คํ ์ ์ ์์ค ํ์ด ํฌํจ๋ ์ค๋ฅ๋ฅผ ๋ ๋๋ค. ๋ณ์๋ฅผ ๋จผ์ ์ ์ธํ์ธ์. ํค๋ ๋ด ์ ์ธ, As New, ์ผํ๋ก ๋๋ ๋ฆฌ์์ค ๋ชฉ๋ก, ์ฌ์ฉ์ Dispose๋ ์ง์ํ์ง ์์ต๋๋ค.statements / End Usingโ End Using์ ์บก์ฒํ ๊ฐ์ฒด๋ฅผ ๋ซ์ต๋๋ค. ๋ณ์๋ ๋จ์ง๋ง ๋ฆฌ์์ค๋ ๋ซํ ์ํ์ ๋๋ค. ์ฌ๋ฌ ๋ฆฌ์์ค๋ ๋ธ๋ก์ ์ค์ฒฉํ์ธ์. ๋ณ์๋ฅผ ๋ค์ ํ ๋นํด๋ ๋ซํ ์๋ ๊ฐ์ฒด๋ ๋ฐ๋์ง ์์ต๋๋ค.
๋ฐํ๊ฐ
๋ฌธ ์์ฒด๋ ๊ฐ์ ๋ฐํํ์ง ์์ต๋๋ค. ๋ณธ๋ฌธ์ Return์ ๋จผ์ ๋ฆฌ์์ค๋ฅผ ํด์ ํ ๋ค ํ๋ก์์ ์์ ๋๊ฐ๋๋ค. ์์ ์ IsClosed๋ 1/True ๋๋ 0/False๋ฅผ ๋ฐํํ๋ ์ฌ์ฉ์ ํจ์์ ๋๋ค. Main ๊ฒฐ๊ณผ๋ ๋ฌธ์์ด์ด๋ฉฐ ์ฑ๊ณต ํ๋๊ทธ๊ฐ ์๋๋๋ค.
๋์
- File(path)๋ ๋ํผ๋ฅผ ๋ง๋ญ๋๋ค. ๋ธ๋ก์์ ์ฐ๊ธฐ๋ Create(), ์ฝ๊ธฐ๋ Open()์ ํธ์ถํ์ธ์. Dispose๋ Close()๋ก ๋ฒํผ๋ฅผ ๋น์ฐ๊ณ ํธ๋ค์ ํด์ ํฉ๋๋ค. ๋ซํ MemoryStream์ Length()๋ ์ค๋ฅ๋ฅผ ๋ ๋๋ค. ์์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ง ์ฌ์ฉํ๋ฉฐ ํ์ผ์ ๋ง๋ค์ง ์์ต๋๋ค.
- ์ปดํ์ผ๋ฌ๋ ๋ณดํธ ์์ญ์ ๋ง๋ค๊ณ ์ธํฐํ๋ฆฌํฐ๋ ํ์ฌ ํธ์ถ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํฉ๋๋ค. End Using, Return, Exit, Continue, ์ธ๋ถ ์ ํ๋ ์์ชฝ๋ถํฐ ๋ฐ๊นฅ์ชฝ ์์๋ก ๋ซ์ต๋๋ค. ๋ณธ๋ฌธ ์์ผ๋ก ์ ํํ๋ฉด ์คํ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ์ผ๋ฐ ์ค๋ฅ๋ ์ธ๋ถ Catch ์ ์ ๋ฆฌ์์ค๋ฅผ ๋ซ์ต๋๋ค. ์คํจํ Dispose๋ ์ฌ์๋ํ์ง ์์ผ๋ฉฐ ์ธ๋ถ ๋ฆฌ์์ค๋ ํด์ ํฉ๋๋ค. ๋น์ ์ ์ง๋ ์คํฌ๋ฆฝํธ Catch/Finally๋ฅผ ๊ฑด๋๋ฐ์ง๋ง ๋ค์ดํฐ๋ธ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๋ฉฐ ๋ซ๊ธฐ ์ค๋ฅ๋ก ์ทจ์๋ฅผ ๋์ฒดํ์ง ์์ต๋๋ค. ์ผ์ ์ ์ง๋ ์ฌ๊ฐ๋ ์ ์ง๊น์ง ๋ฆฌ์์ค๋ฅผ ์ ์งํฉ๋๋ค. ์ ์ค๋ ๋๋ฅผ ๋ง๋ค์ง ์์ผ๋ฉฐ ์ด์์ฒด์ ์์ ๋งํ ๋ซ๊ธฐ ์์ ์ ๊ฐ์ ๋ก ์ค๋จํ์ง ๋ชปํฉ๋๋ค.
- ๋ฆฌ์์ค๋ฅผ ์ด๋ฆฐ ์ํ๋ก ์ ์งํ๋ฉฐ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด Using ์์ Try/Catch๋ฅผ ๋ฃ์ผ์ธ์. On Error Resume Next์์ ์ฒ๋ฆฌ๋์ง ์์ ๋ณธ๋ฌธ ์ค๋ฅ๋ ๋ฆฌ์์ค๋ฅผ ๋ซ๊ณ ์ ์ฒด ๋ธ๋ก ๋ค์์ผ๋ก ์งํํฉ๋๋ค. ์ด๋ฏธ ๋ซํ ๋ณดํธ ์์ญ์ ๋ค์ ๋ค์ด๊ฐ์ง ์๋๋ก On Error GoTo๋ Using ๋ด๋ถ ๋ ์ด๋ธ์ ๋์์ผ๋ก ์ผ์ ์ ์์ต๋๋ค.
- ์ค๋ฅ๋ก Using์ ๋ฒ์ด๋ ๋ค ์ธ๋ถ On Error GoTo ์ฒ๋ฆฌ๊ธฐ์ Resume์ ํค๋๋ถํฐ ์ ์ฒด ๋ธ๋ก์ ๋ค์ ์คํํ๋ฉฐ ๋ฆฌ์์ค ์์ ๋ค์ ๊ณ์ฐํฉ๋๋ค. Resume Next๋ End Using ๋ฐ๋ก ๋ค์ ์ค๋ก ์งํํฉ๋๋ค. ๋ซํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์๋ ๋ค์ ์ด๋ฆฌ์ง ์์ผ๋ฏ๋ก ์ฌ์๋์๋ ์ ๋ฆฌ์์ค๋ฅผ ๋ง๋๋ ์์ ์ฌ์ฉํ์ธ์. ์ด๋ฏธ ์ํํ ์์ ์ด ๋ฐ๋ณต๋ ์ ์์ต๋๋ค.
์์
1. ๋ฉ๋ชจ๋ฆฌ ์คํธ๋ฆผ ๋ซ๊ธฐ
# stream์ ๋ฆฌ์์ค์ด๊ณ size๋ ์ด๋ฆฐ ์ํ์์ Length()=0์ ์ฝ์ต๋๋ค. ์ข
๋ฃ ํ IsClosed๊ฐ ์ค๋ฅ๋ฅผ ์ก์ True=1์ ๋ฐํํ๊ณ Main์ "0:1"์ ๋ฐํํฉ๋๋ค. ByVal์ ์ฐธ์กฐ๋ฅผ ๋ณต์ฌํฉ๋๋ค. ์ด ํ์ต์ฉ ํจ์๋ ๋ชจ๋ Length ์ค๋ฅ๋ฅผ ๋ซํ์ผ๋ก ๋ณด๋ฏ๋ก ์ด ์คํธ๋ฆผ์๋ง ์ฌ์ฉํฉ๋๋ค.
Option Explicit On
Function IsClosed(ByVal stream) As Boolean
Try
Dim size = stream.Length()
Return False
Catch closed
Return True
End Try
End Function
Sub Main()
Dim stream = MemoryStream()
Dim size = -1
Using stream
size = stream.Length()
End Using
Return CStr(size) & ":" & CStr(IsClosed(stream))
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
stream์ ๋ฆฌ์์ค์ด๊ณ size๋ ์ด๋ฆฐ ์ํ์์ Length()=0์ ์ฝ์ต๋๋ค. ์ข ๋ฃ ํ IsClosed๊ฐ ์ค๋ฅ๋ฅผ ์ก์ True=1์ ๋ฐํํ๊ณ Main์ "0:1"์ ๋ฐํํฉ๋๋ค. ByVal์ ์ฐธ์กฐ๋ฅผ ๋ณต์ฌํฉ๋๋ค. ์ด ํ์ต์ฉ ํจ์๋ ๋ชจ๋ Length ์ค๋ฅ๋ฅผ ๋ซํ์ผ๋ก ๋ณด๋ฏ๋ก ์ด ์คํธ๋ฆผ์๋ง ์ฌ์ฉํฉ๋๋ค.
2. ๋ณด์กฐ ํจ์์์ ๋ฐํ
# ReadLength(stream)์ Integer 0์ ๊ณ์ฐํฉ๋๋ค. Return์ด Main์ size๋ฅผ ๋๊ธฐ๊ธฐ ์ ์ ์คํธ๋ฆผ์ ๋ซ์ต๋๋ค. ๋ค์ Length๋ ์คํจํ์ฌ closed=True, ๊ฒฐ๊ณผ๋ "0:1"์
๋๋ค. ํธ์ถ์๊ฐ ๊ณ์ ์ด์ด ๋์ด์ผ ํ๋ ๋ฆฌ์์ค๋ ์ ๋ฌํ์ง ๋ง์ธ์.
Option Explicit On
Function ReadLength(ByVal stream) As Integer
Using stream
Return stream.Length()
End Using
End Function
Sub Main()
Dim stream = MemoryStream()
Dim size = ReadLength(stream)
Dim closed = False
Try
Dim after = stream.Length()
Catch problem
closed = True
End Try
Return CStr(size) & ":" & CStr(closed)
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
ReadLength(stream)์ Integer 0์ ๊ณ์ฐํฉ๋๋ค. Return์ด Main์ size๋ฅผ ๋๊ธฐ๊ธฐ ์ ์ ์คํธ๋ฆผ์ ๋ซ์ต๋๋ค. ๋ค์ Length๋ ์คํจํ์ฌ closed=True, ๊ฒฐ๊ณผ๋ "0:1"์ ๋๋ค. ํธ์ถ์๊ฐ ๊ณ์ ์ด์ด ๋์ด์ผ ํ๋ ๋ฆฌ์์ค๋ ์ ๋ฌํ์ง ๋ง์ธ์.
3. ์ค๋ฅ ํ ์ค์ฒฉ ํด์
# outer์ inner๋ ๋ณ๊ฐ ์คํธ๋ฆผ์
๋๋ค. Throw "demo"๋ inner๋ถํฐ outer ์์๋ก ๋ซ์ต๋๋ค. Catch๋ ์๋ ๋ฉ์์ง๋ฅผ ๋ณด์กดํ๊ณ IsClosed๋ ๊ฐ๊ฐ 1์ ๋ฐํํฉ๋๋ค. Main ๊ฒฐ๊ณผ "demo:2"์์ 2๋ ๋ซํ ๊ฐ์ฒด ์์ด๋ฉฐ Boolean์ด ์๋๋๋ค.
Option Explicit On
Function IsClosed(ByVal stream) As Boolean
Try
Dim size = stream.Length()
Return False
Catch closed
Return True
End Try
End Function
Sub Main()
Dim outer = MemoryStream()
Dim inner = MemoryStream()
Dim message = ""
Try
Using outer
Using inner
Throw "demo"
End Using
End Using
Catch problem
message = problem
End Try
Return message & ":" & CStr(IsClosed(outer) + IsClosed(inner))
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
outer์ inner๋ ๋ณ๊ฐ ์คํธ๋ฆผ์ ๋๋ค. Throw "demo"๋ inner๋ถํฐ outer ์์๋ก ๋ซ์ต๋๋ค. Catch๋ ์๋ ๋ฉ์์ง๋ฅผ ๋ณด์กดํ๊ณ IsClosed๋ ๊ฐ๊ฐ 1์ ๋ฐํํฉ๋๋ค. Main ๊ฒฐ๊ณผ "demo:2"์์ 2๋ ๋ซํ ๊ฐ์ฒด ์์ด๋ฉฐ Boolean์ด ์๋๋๋ค.