.NET의 예외 처리 및 ThrowHandling and throwing exceptions in .NET

애플리케이션은 실행 중에 발생하는 오류를 일관된 방식으로 처리할 수 있어야 합니다.Applications must be able to handle errors that occur during execution in a consistent manner. .NET에서는 일관된 방식으로 애플리케이션에 오류를 알리기 위한 모델을 제공합니다. .NET 작업은 예외를 throw하여 오류를 나타냅니다..NET provides a model for notifying applications of errors in a uniform way: .NET operations indicate failure by throwing exceptions.

예외Exceptions

예외란 프로그램 실행 중 발생한 모든 오류 상태 또는 예기치 못한 동작입니다.An exception is any error condition or unexpected behavior that is encountered by an executing program. 예외는 사용 중인 코드 또는 호출한 코드(예: 공유 라이브러리)의 오류, 사용 불가능한 운영 체제 리소스, 런타임에서 발생한 예기치 못한 상황(예: 확인할 수 없는 코드) 등에 의해 throw될 수 있습니다.Exceptions can be thrown because of a fault in your code or in code that you call (such as a shared library), unavailable operating system resources, unexpected conditions that the runtime encounters (such as code that can't be verified), and so on. 사용 중인 애플리케이션이 이러한 일부 상황으로부터 복구될 수 있지만 복구될 수 없는 경우도 있습니다.Your application can recover from some of these conditions, but not from others. 대부분의 애플리케이션 예외로부터는 복구할 수 있지만 대부분의 런타임 예외로부터는 복구할 수 없습니다.Although you can recover from most application exceptions, you can't recover from most runtime exceptions.

.NET에서 예외는 System.Exception 클래스에서 상속되는 개체입니다.In .NET, an exception is an object that inherits from the System.Exception class. 예외는 문제가 발생한 코드 영역에서 throw됩니다.An exception is thrown from an area of code where a problem has occurred. 예외는 애플리케이션에서 해당 예외를 처리하거나 프로그램이 종료될 때까지 스택으로 전달됩니다.The exception is passed up the stack until the application handles it or the program terminates.

예외 대 일반적인 오류 처리 방법Exceptions vs. traditional error-handling methods

일반적으로 언어 오류 처리 모델은 오류를 감지하고 해당 오류 처리기를 찾는 언어 고유의 방식에 의존하거나 운영 체제에서 제공하는 오류 처리 메커니즘에 의존했습니다.Traditionally, a language's error-handling model relied on either the language's unique way of detecting errors and locating handlers for them, or on the error-handling mechanism provided by the operating system. .NET에서 예외 처리를 구현하는 방법에는 다음과 같은 이점이 있습니다.The way .NET implements exception handling provides the following advantages:

  • 예외 throw 및 처리는 .NET 프로그래밍 언어에서 동일하게 작동합니다.Exception throwing and handling works the same for .NET programming languages.

  • 예외 처리에 특정한 언어 구문이 필요하지는 않지만, 각 언어에서 고유한 구문을 정의할 수 있도록 허용합니다.Doesn't require any particular language syntax for handling exceptions, but allows each language to define its own syntax.

  • 프로세스 및 컴퓨터 경계 간에도 예외가 throw될 수 있습니다.Exceptions can be thrown across process and even machine boundaries.

  • 예외 처리 코드를 애플리케이션에 추가하여 프로그램 안정성을 높일 수 있습니다.Exception-handling code can be added to an application to increase program reliability.

예외는 반환 코드 등의 다른 오류 알림 방법에 비해 이점을 제공합니다.Exceptions offer advantages over other methods of error notification, such as return codes. 예외가 throw되고 사용자가 처리하지 않을 경우 런타임에서 애플리케이션을 종료하기 때문에 오류가 발견되지 않습니다.Failures don't go unnoticed because if an exception is thrown and you don't handle it, the runtime terminates your application. 오류 반환 코드를 검사하지 못한 코드의 결과로 잘못된 값이 시스템 전체에 계속 전파되지 않습니다.Invalid values don't continue to propagate through the system as a result of code that fails to check for a failure return code.

일반적인 예외Common exceptions

다음 표에서는 몇 가지 일반적인 예외 및 예외가 발생할 수 있는 경우의 예를 보여 줍니다.The following table lists some common exceptions with examples of what can cause them.

예외 형식Exception type 설명Description 예제Example
Exception 모든 예외의 기본 클래스.Base class for all exceptions. 없음(이 예외의 파생된 클래스 사용).None (use a derived class of this exception).
IndexOutOfRangeException 배열이 올바르지 않게 인덱싱된 경우에만 런타임에서 발생됩니다.Thrown by the runtime only when an array is indexed improperly. 유효 범위를 벗어난 배열 인덱싱:Indexing an array outside its valid range:
arr[arr.Length+1]
NullReferenceException null 개체가 참조되는 경우에만 런타임에서 발생됩니다.Thrown by the runtime only when a null object is referenced. object o = null;
o.ToString();
InvalidOperationException 잘못된 상태에 있는 경우에 메서드에서 발생됩니다.Thrown by methods when in an invalid state. 기본 컬렉션에서 항목을 제거한 후 Enumerator.MoveNext() 호출.Calling Enumerator.MoveNext() after removing an item from the underlying collection.
ArgumentException 모든 인수 예외에 대한 기본 클래스.Base class for all argument exceptions. 없음(이 예외의 파생된 클래스 사용).None (use a derived class of this exception).
ArgumentNullException 인수에 Null을 허용하지 않는 메서드에서 발생됩니다.Thrown by methods that do not allow an argument to be null. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException 인수가 지정된 범위에 있는지 확인하는 메서드에서 발생됩니다.Thrown by methods that verify that arguments are in a given range. String s = "string";
s.Substring(s.Length+1);

참고 항목See also