방프리

21.09.25 Chapter5. 예외처리 (Item 47) 본문

C#/Effective C#

21.09.25 Chapter5. 예외처리 (Item 47)

방프리 2021. 9. 25. 12:03

Item 47 : 사용자 지정 예외 클래스를 완벽하게 작성하라

 

예외처리는 프로그래머라면 반드시 해주어야 하는 필수항목이다. 

예외를 처리할 때 Exception 클래스를 통해 통합적인 예외처리를 하는 방법과 NullReferenceException 같은

특수 Exception 클래스를 인자로 예외처리 하는 두 가지 방식으로 나뉜다.

이 항목에서 저자는 전자가 아닌 후자로 처리하되 자신이 만든 클래스 타입에서 예외 처리를 해야한다면

반드시 그 클래스에 맞는 예외 클래스도 만들어주어야 한다고 강조한다.

//모든 예외를 처리할 수 있지만 정확한 원인 파악이 어려움
try 
{
    DoWork();
}
catch (Exception e)
{
    CatchException();
}
finally
{
    LastWork();
}

//위의 코드보다 좀 더 상세한 원인 파악이 가능
try 
{
    DoWork();
}
catch (MyFirstApplicationException e)
{
    CatchMyFristApplicationException();
}
catch (AnotherApplicationException e)
{
    CatchAnotherApplicationException();
}
finally
{
    LastWork();
}

이 때 예외 클래스에서 반드시 구현해주어야 하는 함수는 다음과 같다.

//기본 생성자
public Exception();

//에러 메시지를 포함하는 생성자
public Exception(string);

//에러 메시지와 내부 예외를 포함하는 생성자
public Exception(string, Exception);

//입력 스트림을 이용하는 생성자
protected Exception(Serialization info, StreamingContext);

더 많은 정보를 원한다면 ToString() 메서드를 적극 활용하는 것이 좋다.

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