본문 바로가기
C#/Effective C#

[Effective C#] Item47 사용자 지정 예외 클래스를 완벽하게 작성하라

by 코모's 2023. 6. 12.
반응형

예외 객체에 포함된 기존 오류 관련 정보를 훼손하지 않으면서도 저수준의 에러 내용을 응용 프로그램 관점으로 재해석한 정보를 예외 객체에 포함 시키고 싶을때 사용자 지정 예외 클래스를 사용할 수 있다.

 

예외 클래스의 작성 이유

catch 문을 사용하여 예외를 다루는 코드를 작성할 개발자가 각각을 구분해서 서로 다른 작업을 수행할 수 있도록 하기 위함이다.

 

예외클래스 만들기

1. 개별 예외 클래스의 고유한 책임을 명확하게 규정해야한다.

2. 모든 예외 클래스의 일므은 Exception으로 끝나야 한다.

3. System.Exception 클래스나 혹은 더 적절한 클래스를 상속해서 구현해야 한다.

 

새로운 예외 클래스를 작성할 때는 반드시 4개의 생성자를 작성해야한다.

// 기본 생성자
public Exception();
// 에러 메시지를 포함하는 생성자
public Exception(string);
// 에러 메시지와 내부 예외를 포함하는 생성자
public Exception(string, Exception);
// 입력 스트림을 이용하는 생성자
protected Exception(SerializationInfo, StreamingContext);

마지막 생성자느 예외 클래스가 serializae 가능해야 함을 의미하는 것이기도 하다.

 

예외 변환

저수준의 예외에 대해서 보다 세부적인 상태 정보를 포함하는 고수준의 예외로 변경하는 작업

public double DoSomeWork()
{
    try
    {
        //...
        return ThirdPartyLibrary.ImportantRoutine();
    }
    catch(ThirdPartyException e)
    {
        var msg = $"Problem with {e.ToString()} using library";
        throw new DoingSomeWorkException(msg, e);
    }
}

 

반응형