예외 계층

업데이트: 2007년 11월

예외에는 두 가지 유형, 즉 실행 프로그램에서 생성한 예외와 공용 언어 런타임에서 생성한 예외가 있습니다. 또한, 응용 프로그램이나 런타임에서 throw될 수 있는 예외 계층이 있습니다.

Exception은 예외의 기본 클래스입니다. ApplicationExceptionSystemException과 같은 일부 예외 클래스는 Exception에서 직접 상속받습니다. 이러한 두 클래스가 거의 모든 런타임 예외의 기본이 됩니다.

Exception에서 직접 파생되는 대부분의 예외는 Exception 클래스에 어떤 기능도 추가하지 않습니다. 예를 들어, InvalidCastException 클래스 계층은 다음과 같습니다.

Object    Exception       SystemException          InvalidCastException

런타임에서는 오류가 발생하면 SystemException의 해당 파생 클래스를 throw합니다. 이러한 오류는 배열 범위 초과 오류와 같은 런타임 검사 오류로 인해 발생하며 메서드를 실행할 때 발생할 수 있습니다. 새 예외를 만드는 응용 프로그램을 디자인하는 경우 이러한 예외를 Exception 클래스로부터 파생시켜야 합니다. SystemException은 catch하지 않는 것이 좋습니다. 또한 응용 프로그램에서 SystemException을 throw하도록 프로그래밍하는 것도 좋지 않습니다.

런타임이나 복구할 수 없는 상황에서 throw되는 가장 심각한 예외에는 ExecutionEngineException, StackOverflowExceptionOutOfMemoryException이 있습니다.

상호 운용성 예외는 SystemException에서 파생되며 ExternalException에 의해 더 확장됩니다. 예를 들어, COMException은 COM interop 작동 중에 throw된 예외이며 ExternalException에서 파생됩니다. ExternalException에서는 Win32ExceptionSEHException도 파생됩니다.

런타임 예외 계층

런타임에는 개별 명령을 실행할 때 런타임에서 throw하는 SystemException에서 파생되는 기본 예외 집합이 있습니다. 다음은 런타임과, 파생된 클래스를 만들어야 하는 상황에서 제공되는 표준 예외를 계층적으로 나열한 표입니다.

예외 형식

기본 형식

설명

예제

Exception

Object

모든 예외의 기본 클래스입니다.

없음(이 예외의 파생 클래스를 사용함)

SystemException

Exception

모든 런타임 생성 오류의 기본 클래스입니다.

없음(이 예외의 파생 클래스를 사용함)

IndexOutOfRangeException

SystemException

배열이 올바르지 않게 인덱싱되는 경우에만 런타임에 의해 throw됩니다.

배열의 인덱스가 유효한 범위를 벗어남

arr[arr.Length+1]

NullReferenceException

SystemException

null 개체가 참조되는 경우에만 런타임에 의해 throw됩니다.

object o = null;

o.ToString();

AccessViolationException

SystemException

잘못된 메모리가 액세스되는 경우에만 런타임에 의해 throw됩니다.

비관리 코드 또는 안전하지 않은 관리 코드와 상호 운용하면서 잘못된 포인터가 사용될 때 발생합니다.

InvalidOperationException

SystemException

유효하지 않은 상태에 있을 때 메서드에 의해 throw됩니다.

내부 컬렉션에서 Item을 제거한 후 Enumerator.GetNext() 호출

ArgumentException

SystemException

모든 인수 예외의 기본 클래스입니다.

없음(이 예외의 파생 클래스를 사용함)

ArgumentNullException

ArgumentException

인수에 null을 허용하지 않는 메서드에 의해 throw됩니다.

String s = null;

"Calculate".IndexOf (s);

ArgumentOutOfRangeException

ArgumentException

인수가 지정된 범위에 있는지 검사하는 메서드에 의해 throw됩니다.

String s = "string";

s.Chars[9];

ExternalException

SystemException

런타임 외부에서 발생하거나 런타임 외부의 환경을 대상으로 하는 예외의 기본 클래스입니다.

없음(이 예외의 파생 클래스를 사용함)

ComException

ExternalException

COM HRESULT 정보를 캡슐화하는 예외입니다.

COM interop에 사용

SEHException

ExternalException

Win32 구조의 예외 처리 정보를 캡슐화하는 예외입니다.

비관리 코드 interop에 사용

참고 항목

개념

Exception 클래스 및 속성

예외 개요

최선의 예외 처리 구현 방법

기타 리소스

예외 처리 기본 사항

예외 처리 및 Throw