Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 모든 예외의 기본 클래스는 무엇일까? System.Exception 완벽 정리

C# 예외 계층 구조의 출발점, System.Exception

C#에서 발생하는 모든 예외(Exception)는 System.Exception 클래스를 기반으로 동작합니다. 이 클래스 아래에는 크게 두 개의 핵심 파생 클래스가 있으며, 각각 용도가 다릅니다.

  • System.ApplicationException: 응용 프로그램 실행 중 발생하는 예외를 다루는 클래스입니다. 개발자가 직접 정의하는 사용자 지정 예외는 이 클래스를 상속받아 작성하는 것이 좋습니다.
  • System.SystemException: .NET 런타임이 미리 정의해 둔 시스템 예외들의 기본 클래스입니다.

즉, 프로그래머가 새로운 예외를 만들 때는 ApplicationException 계열로, 런타임이 던지는 내장 예외들은 SystemException 계열로 분류된다고 이해하면 됩니다.

System.SystemException을 기본 클래스로 하는 주요 예외

.NET은 SystemException 아래에 다양한 내장 예외 클래스를 제공합니다. 자주 마주치는 대표적인 예외들을 정리하면 다음과 같습니다.

번호예외 클래스 및 설명
1System.IO.IOException
파일 읽기·쓰기 등 입출력(I/O) 작업에서 발생하는 오류를 처리합니다.
2System.IndexOutOfRangeException
배열 인덱스가 유효 범위를 벗어났을 때 발생하는 오류를 처리합니다.
3System.ArrayTypeMismatchException
배열에 저장하려는 값의 형식이 배열의 실제 타입과 일치하지 않을 때 발생하는 오류를 처리합니다.
4System.NullReferenceException
null인 객체를 참조하려 할 때 발생하는 오류를 처리합니다.
5System.DivideByZeroException
정수를 0으로 나누려 할 때 발생하는 오류를 처리합니다.
6System.InvalidCastException
형식 변환(캐스팅) 과정에서 잘못된 변환이 시도될 때 발생하는 오류를 처리합니다.
7System.OutOfMemoryException
사용 가능한 메모리가 부족할 때 발생하는 오류를 처리합니다.
8System.StackOverflowException
무한 재귀 호출 등으로 스택 영역이 넘쳤을 때 발생하는 오류를 처리합니다.

예외 처리 기본 예제

실제 코드에서는 try~catch 블록을 사용해 이러한 예외를 잡아낼 수 있습니다. 다음은 배열 인덱스 오류를 처리하는 간단한 예입니다.

try
{
    int[] numbers = new int[3];
    Console.WriteLine(numbers[5]); // 범위 초과 접근
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("배열 인덱스 오류: " + ex.Message);
}

이처럼 어떤 예외가 발생할 수 있는지 미리 알고 있으면, 상황에 맞는 catch 블록을 작성해 프로그램의 안정성을 크게 높일 수 있습니다.