닷넷 사용자 정의 예외 클래스의 최소 구현 코드
엄밀히, 사용자 정의 예외 클래스가 만족해야 할 최소 구현 코드는 Exception 타입을 상속받기만 하면 됩니다.
public class RuntimeException : Exception
{
public RuntimeException()
{
}
}
하지만, 대개의 경우 예외와 함께 보여질 메시지를 전달하기 때문에 문자열을 전달받는 생성자를 정의해주는 것이 좋습니다.
public class RuntimeException : Exception
{
public RuntimeException()
{
}
public RuntimeException(string message) : base(message)
{
}
}
또한, Inner Exception도 가끔씩 전달하기 때문에 이에 대한 생성자도 필요합니다.
public class RuntimeException : Exception
{
public RuntimeException()
{
}
public RuntimeException(string message) : base(message)
{
}
public RuntimeException(string message, Exception innerException)
: base(message, innerException)
{
}
}
마지막으로 예외에 대한 직렬화를 고려해야 합니다. 이걸 해주지 않으면 AppDomain 경계조차도 넘을 수 없기 때문에 예외 전달 자체에 다시 예외가 발생하는 경우가 있습니다. 따라서, 최종적으로 다음과 같이 최소 구현을 해주시면 좋습니다.
[Serializable]
public class RuntimeException : Exception, ISerializable
{
public RuntimeException()
{
}
public RuntimeException(string message)
: base(message)
{
}
public RuntimeException(string message, Exception innerException)
: base(message, innerException)
{
}
protected RuntimeException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
base.GetObjectData(info, context);
}
}
다음은 참고 자료입니다. ^^
Exception 생성자 (SerializationInfo, StreamingContext)
; https://docs.microsoft.com/ko-kr/dotnet/api/system.exception.-ctor
Creating Custom Exceptions in .NET
; http://blog.gurock.com/articles/creating-custom-exceptions-in-dotnet/
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]