C#/Effective C#

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

코모's 2023. 6. 12. 17:13
반응형

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

 

예외 클래스의 작성 이유

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);
    }
}

 

반응형