프로그래밍VB.NET 개발자

Visual Basic에서 사용자 정의 예외(Custom Exceptions)를 어떻게 구현하고 실제로 필요한 경우는 언제인가요?

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

답변.

Visual Basic .NET에서는 애플리케이션에서 발생한 특정 오류를 보다 명확히 나타내기 위해 사용자 정의 예외를 생성할 수 있습니다. 이를 위해서는 System.Exception 클래스(또는 그 하위 클래스)로부터 새로운 클래스를 상속받고, 필요에 따라 추가 정보를 전달하기 위한 새로운 속성을 추가해야 합니다.

사용자 정의 예외는 코드의 가독성과 유지보수성을 높이는 데 도움이 되며, 특히 특정 비즈니스 시나리오에 대한 특화된 처리가 필요할 때 유용합니다.

예제:

Public Class InvalidUserNameException Inherits ApplicationException Public Sub New(message As String) MyBase.New(message) End Sub End Class ' 사용 예: Sub ValidateUserName(userName As String) If userName = "" Then Throw New InvalidUserNameException("사용자 이름은 비어 있을 수 없습니다") End If End Sub

함정 질문.

질문: "Visual Basic에서 단순히 문자열을 사용하여 Throw "오류"를 던질 수 있나요? Try...Catch에서 처리할 수 있나요?"

답변: 아니요, 그렇게 할 수 없습니다. Throw 연산자는 Exception 유형의 객체를 요구합니다. 문자열을 던지려고 하면(Throw "err") 컴파일 오류가 발생합니다. 항상 Exception 클래스의 새로운 인스턴스 또는 그 하위 인스턴스를 생성해야 합니다.

잘못된 코드 예:

' 이것은 오류를 발생시킵니다! Throw "오류!"

올바른 코드 예:

Throw New Exception("오류!")

주제에 대한 이해 부족으로 인한 실제 오류 예시.


이야기:

대규모 프로젝트에서 한 개발자가 Throw "잘못된 데이터!"를 사용하여 예외를 던졌습니다. 이는 컴파일 시 오류를 초래하였고, 코드가 정적 검사를 통과하지 못했기 때문에 프로덕션에서 문제가 발생했습니다. 올바른 예외 처리가 없어서 릴리스가 일주일 지연되는 상황이 발생했습니다.


이야기:

팀은 InnerException 매개변수가 있는 생성자를 추가하지 않고 사용자 정의 예외를 만들었습니다. 복잡한 오류를 시诊할 때 원래의 예외를 '포함'할 수 없어서 호출 스택이 손실되었습니다. 결과적으로 오류의 원인을 찾기가 어려워졌습니다.


이야기:

미디어 애플리케이션에서 사용자 정의 예외가 너무 자주 사용되었고 그 목적에 맞지 않게 사용되었습니다(예: 잘못된 데이터 입력 시마다). 그 결과 시스템 성능이 저하되었습니다. 예외 생성이 운영적으로 비용이 많이 드는 작업이기 때문입니다. 검토 후 이러한 예외 중 일부는 일반 조건 검사를 사용하여 교체되었습니다.