다음을 통해 공유


.NET에서 예외 처리 및 예외 던지기

애플리케이션은 일관된 방식으로 실행 중에 발생하는 오류를 처리할 수 있어야 합니다. .NET은 애플리케이션에 오류를 균일한 방식으로 알리는 모델을 제공합니다. .NET 작업은 예외를 throw하여 오류를 나타냅니다.

예외

예외는 실행 중인 프로그램에서 발생하는 오류 조건 또는 예기치 않은 동작입니다. 코드 사용 중 또는 직접 작성한 코드(예: 공유 라이브러리)의 오류, 사용할 수 없는 운영 체제 리소스, 런타임에서 발생하는 예상치 못한 상황(예: 확인할 수 없는 코드) 등으로 인해 예외가 발생할 수 있습니다. 애플리케이션은 이러한 조건 중 일부에서 복구할 수 있지만 다른 조건에서는 복구할 수 없습니다. 대부분의 애플리케이션 예외에서 복구할 수 있지만 대부분의 런타임 예외에서 복구할 수는 없습니다.

.NET에서 예외는 클래스 System.Exception를 상속하는 개체입니다. 문제가 발생한 코드 영역에서 예외가 throw됩니다. 예외는 애플리케이션이 처리하거나 프로그램이 종료될 때까지 스택 위로 전달됩니다.

예외 및 기존 오류 처리 메서드

일반적으로 언어의 오류 처리 모델은 오류를 검색하고 처리기를 찾는 언어의 고유한 방법 또는 운영 체제에서 제공하는 오류 처리 메커니즘에 의존했습니다. .NET에서 예외 처리를 구현하는 방법은 다음과 같은 이점을 제공합니다.

  • 예외 발생 및 처리는 .NET 프로그래밍 언어에서 동일하게 작동합니다.

  • 예외를 처리하기 위한 특정 언어 구문은 필요하지 않지만 각 언어에서 고유한 구문을 정의할 수 있습니다.

  • 예외는 프로세스 및 기기 경계를 넘어 던져질 수 있습니다.

  • 프로그램 안정성을 높이기 위해 예외 처리 코드를 애플리케이션에 추가할 수 있습니다.

예외는 반환 코드와 같은 다른 오류 알림 방법보다 이점을 제공합니다. 예외가 발생하고 이를 처리하지 않으면 런타임이 애플리케이션을 종료하므로 오류는 그냥 지나치지 않습니다. 잘못된 값은 오류 반환 코드를 확인하지 못하는 코드의 결과로 시스템을 통해 계속 전파되지 않습니다.

일반적인 예외

다음 표에는 몇 가지 일반적인 예외와 원인의 예가 나와 있습니다.

예외 유형 설명 예시
Exception 모든 예외에 대한 기본 클래스입니다. 없음(이 예외의 파생 클래스 사용).
IndexOutOfRangeException 배열이 잘못 인덱싱된 경우에만 런타임에서 throw됩니다. 유효한 범위를 벗어난 배열 인덱싱:
arr[arr.Length+1]
NullReferenceException null 개체를 참조하는 경우에만 런타임에 의해 throw됩니다. object o = null;
o.ToString();
InvalidOperationException 잘못된 상태일 때 메서드에 의해 throw됩니다. 기본 컬렉션에서 항목을 제거한 후 호출 Enumerator.MoveNext() 합니다.
ArgumentException 모든 인수 예외에 대한 기본 클래스입니다. 없음(이 예외의 파생 클래스 사용).
ArgumentNullException 인수를 null로 허용하지 않는 메서드에 의해 throw됩니다. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException 인수가 특정 범위 안에 있는지를 확인하는 메서드에 의해 throw됩니다. String s = "string";
s.Substring(s.Length+1);

참고하십시오