프로그래밍VB 개발자, VB.NET 개발자

Visual Basic에서 에러 처리를 위한 방법은 무엇이 있나요? On Error GoTo와 Try...Catch(VB.NET의 경우)의 차이를 설명해주세요.

Hintsage AI 어시스턴트로 면접 통과

답변.

Visual Basic에서는 On Error(VB6)와 Try...Catch(VB.NET) 구문을 사용하여 에러를 처리합니다.

  • On Error GoTo <Label> — VB6의 구식 방법으로, 에러 발생 시 지정한 레이블로 이동합니다. 중첩을 지원하지 않으며, 복잡한 코드로 이어질 수 있습니다.
  • Try...Catch...Finally — 현대적인 방법(VB.NET)으로, 예외를 처리하고, 다양한 유형의 에러를 서로 다른 Catch 블록에서 처리하며, Finally에서 최종 작업을 반드시 수행할 수 있습니다.

예시:

VB6:

Sub OpenFile() On Error GoTo ErrorHandler Open "file.txt" For Input As #1 ' 파일 읽기 Close #1 Exit Sub ErrorHandler: MsgBox "오류: " & Err.Description End Sub

VB.NET:

Sub OpenFileVBNet() Try Using reader As New StreamReader("file.txt") Dim line As String = reader.ReadLine() End Using Catch ex As IOException MsgBox("오류: " & ex.Message) Finally ' 항상 실행됩니다 End Try End Sub

속임수 질문.

VB6에서 On Error Resume Next 블록에서 오류가 발생하면, 어디서 오류가 발생했는지 어떻게 확인하고 올바르게 처리할 수 있나요?

정답: On Error Resume Next 모드에서 프로그램은 다음 줄에서 계속 실행됩니다. 오류가 발생했는지 확인하려면 호출이 끝난 후 Err 객체를 확인해야 합니다.

On Error Resume Next ' 일부 코드 If Err.Number <> 0 Then MsgBox "오류: " & Err.Description Err.Clear End If

주제에 대한 세부사항을 모른 채 발생한 실제 오류 예시.


이야기

VB6에서 VB.NET으로 전환하면서 일부 처리기를 On Error GoTo 스타일로 유지하여 오류가 암묵적으로 무시되는 결과를 초래했습니다. 처리 로직이 혼동되어 데이터베이스에 반쯤 비어 있는 데이터가 남아 있었고, 버그는 몇 달 후에야 발견되었습니다.


이야기

Err.Clear를 사용하지 않아 한 번 처리된 오류 후에도 Err.Number가 0이 아닌 상태로 남아 있었습니다. 이후의 검사에서 프로그램이 새로운 오류가 발생한 것으로 잘못 판단하고 잘못된 처리 경로로 가았습니다.


이야기

리팩토링 시 On Error Resume Next를 제거하는 것을 잊어버려 오류가 "무시"되고 어떠한 메시지도 출력되지 않았습니다. 문제 진단에 몇 시간이 걸렸으며, 애플리케이션은 정상적으로 작동하는 것처럼 보였지만 실제로는 중요한 데이터를 잃고 있었습니다.