본문 바로가기

자료

Try...Catch...Finally 문(Visual Basic)

728x90

 

블로그 인기글

● 메이플스토리 신규 룬패치/자동해제 프로그램 [링크 이동]

● 메이플스토리 거짓말탐지기 알림 프로그램 [링크 이동]

C#에서 TensorFlow 사용하는법 [링크 이동]


 

아래는 사용 예제입니다.

Dim bFirst As Boolean

Try

bFirst = True
Throw New Exception(“When 조건절 사용 예시”)

Catch ex As Exception When bFirst

MessageBox.Show(ex.Message, “Exception Handler #1”)

Catch ex As Exception When Not bFirst

MessageBox.Show(ex.Message, “Exception Handler #2”)

End Try


비주얼베이직의 예외 처리 방법은 이전 버전 부터 사용했던 "On Error"문을 사용하는 방법과 C++/C#/Java등에서 사용하는 "Try...Catch"문을 사용하는 방법이 있습니다. 마이크로소프트에서는 되도록 구조적인 예외 처리 방법인 "Try...Catch"문을 사용하도록 권장하고 있으므로 이 부분을 집중적으로 다루겠습니다. 통상 예외처리는 파일이나 데이터베이스 등 시스템 기능이나 외부 시스템과의 인터페이스등에 사용하는데 형변환과 같이 내부적인 작업에도 실행중 예외 처리가 필요하므로 안정적인 프로그램 실행과 예외에 대한 적절한 대비를 위해서 구조적인 예외 처리 문을 적극 활용하는 것이 좋습니다.

Try
    ReportingClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded")
    MessageBox.Show(ReportingClient.UploadString(Branding.Web & "code/bug.php", "POST", _
        "version=" & Application.ProductVersion & "/" & Revision.Build & "&msg=" & Ex.ToString), _
        "Bug report submitted!", MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch SubEx As Net.WebException
    MessageBox.Show("Unable to submit report. " & Environment.NewLine & Ex.ToString, _
        "Unable to submit report", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
    ReportingClient.Dispose()
End Try

실행중 예외 처리 문장의 사용법은 간단합니다. 일단 예외 처리 연관 문장들은 위의 예제와 같이 Try...End Try로 묶습니다. 예외가 발생할 수 있는 실제 실행문은 Try 다음에 기술합니다. 그리고 혹시 발생할 가능성이 있는 예외(Exception)에 대하여는 Catch 문을 사용해서 예외가 발생했을 때의 상황을 처리합니다. Try 다음에 있는 문장 중에서 예외가 발생하면 그 즉시 실행은 해당 예외를 정의한 Catch문으로 이동하고 Try의 다음 문장들은 무시됩니다. 예외 발생 유무에 관계없이 Finally문이 호출되므로 예외에 대한 최종 마무리 처리를 이곳에 기술하면 됩니다. 

아무 내용도 기술하지 않은 Catch문이나  "Catch e As Exception"와 같이 기술하여 모든 예외를 받을 수는 있지만 구체적인 상황에 대비할 수 없는 한계가 있으므로 다양한 예외에 대해서 각각 구분하여 구체적으로 기술할 필요성이 있습니다. 예외의 종류와 예외 발생시 전달되는 정보등 구체적인 예외에 대해서는 https://msdn.microsoft.com/en-us/library/aa289505(v=vs.71).aspx를 참조합니다.

예외처리 과정에서 다룰 마지막 내용은 인위적으로 예외를 발생시킨다는 것으로 아래와 같이 Throw문을 통해서 프로그램 실행 과정에서 프로그래머가 예외를 프로그램 장치의 하나로 활용할 수 있도록 해줍니다.

Private Shared Function LoadCompressionDll() As Compressor
    Dim DLL As Reflection.Assembly = Reflection.Assembly.LoadFrom(ProgramConfig.CompressionDll)

    For Each SubType As Type In DLL.GetTypes
        If GetType(Compressor).IsAssignableFrom(SubType) Then Return CType(Activator.CreateInstance(SubType), Compressor)
    Next

    Throw New ArgumentException("Invalid DLL: " & ProgramConfig.CompressionDll)
End Function

일부 클래스나 함수를 사용할 때는 반드시 Try를 통한 예외 처리를 반드시 요구하는 경우도 있으므로 외부 모듈과 연계되는 로직의 경우에는 예외처리를 반드시 처리한다는 생각으로 코딩하는 것이 좋습니다.

※ 코드 참조 : http://synchronicity.sourceforge.net

728x90