트랙
/
C#
C#
/
학습 과정
/
사용자 정의 예외
사용

사용자 정의 예외 에서 C#

1개의 연습 문제

사용자 정의 예외 소개

사용자 정의 예외는 코드에서 직접 정의한 클래스 중 System.Exception에서 파생된 클래스를 말해요. 클래스 상속의 모든 규칙을 따르지만, 그에 더해 컴파일러와 언어 런타임이 이런 클래스를 특별하게 취급해서, exceptions 연습 문제에서 다룬 것처럼 정상적인 제어 흐름 밖에서 인스턴스를 던지고 잡을 수 있게 해줘요. 사용자 정의 예외는 런타임 예외나 Microsoft 기본 클래스 라이브러리 예외와 똑같은 방식으로 모두 사용할 수 있어요.

이런 특별한 취급은 Exception에서 파생된 클래스에만 적용돼요. 다른 타입의 인스턴스는 던질 수 없어요.

사용자 정의 예외는 메시지나 그 밖의 관련 데이터처럼 예외를 잡는 쪽에서 쓸 수 있는 추가 정보를 함께 전달할 때 자주 사용해요. 이 정보는 로그에 기록하거나 사용자에게 알려 주거나, 어쩌면 재시도 작업에 사용할 수도 있어요. System.Exception에는 메시지와 "내부" 예외를 담아 둘 수 있는 편리한 데이터 멤버와 적절한 생성자가 있어요.

관례상 예외 클래스 이름은 "Exception"으로 끝나요. 예를 들어 MyTerribleException처럼요.

서드 파티 예외를 감싸고 보강하려고 사용자 정의 예외를 쓰는 건 자주 보이는 패턴이지만, 일반적인 조언은 이 용도를 벗어나 자기 코드에서 사용자 정의 예외를 지나치게 많이 쓰지 말라는 거예요. 안티 패턴으로 여겨져요. 이 견해에는 반론도 있고, 이 Stack Exchange 글에서 논쟁의 양쪽을 모두 볼 수 있어요.

이 글은 사용자 정의 예외를 소개하는 좋은 자료예요.

.NET 팀은 예외 만들기와 던지기에 관한 지침의 하나로, 사용자 정의 예외에 여러 가지 편의 생성자를 두라고 권장해요. 대부분의 경우에는 아래에 보여 주는 조합이면 충분해요.

public class IncompleteExerciseException : System.Exception
{
    public IncompleteExerciseException() : base() { }
    public IncompleteExerciseException(string message) : base(message) { }
    public IncompleteExerciseException(string message, System.Exception inner) : base(message, inner) { }
}
GitHub에서 편집 링크가 새 창이나 탭에서 열려요

사용자 정의 예외 배우기