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์ด ์•„๋‹™๋‹ˆ๋‹ค.


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

Basic