C#

예외종류 :: 구체적인 예외로 어떤 오류인지 확인하기

joo_coding 2025. 11. 3. 17:53

< 예외 종류 >

이름 / 의미 / 상황

FormatException 형식이 맞지 않는 경우 "abc"를 int.Parse()로 변환할 때
ArgumentException 잘못된 인자가 전달됨 메서드에 잘못된 값 전달
ArgumentNullException null이 전달됨 null을 허용하지 않는 메서드에 null 전달
ArgumentOutOfRangeException 범위를 벗어난 값 전달 리스트 인덱스가 0~9인데 10을 접근
IndexOutOfRangeException 배열/리스트 인덱스 범위 초과 배열 길이보다 큰 인덱스 접근
NullReferenceException null 참조 시 null 객체의 메서드 호출
InvalidOperationException 잘못된 상태에서 메서드 호출 이미 종료된 스트림에 쓰기 시도
DivideByZeroException 0으로 나눌 때 int x = 10 / 0;
FileNotFoundException 파일을 찾을 수 없음 존재하지 않는 파일 열기
IOException 입출력 오류 파일 읽기/쓰기 중 문제 발생
OutOfMemoryException 메모리 부족 매우 큰 배열 생성 시
StackOverflowException 스택 오버플로우 재귀 호출이 끝없이 반복될 때
NotImplementedException 미구현 메서드 호출 TODO로 남긴 메서드 호출
try
{
    int age = int.Parse(txtAge.Text);
}
catch (FormatException)
{
    MessageBox.Show("나이는 숫자로 입력해야 합니다.");
}
catch (NullReferenceException)
{
    MessageBox.Show("입력창이 비어 있습니다.");
}
catch (Exception ex)
{
    MessageBox.Show("예상치 못한 오류: " + ex.Message);
}

 

-

 

* 예외 계층 구조

System.Object
   └─ System.Exception
       ├─ System.SystemException
       │     ├─ System.ArgumentException
       │     │     ├─ System.ArgumentNullException
       │     │     ├─ System.ArgumentOutOfRangeException
       │     ├─ System.FormatException
       │     ├─ System.IndexOutOfRangeException
       │     ├─ System.NullReferenceException
       │     ├─ System.InvalidOperationException
       │     └─ System.DivideByZeroException
       └─ System.ApplicationException

< 예외정보를 담는 변수 >

발생한 예외의 내용을 자세히 알기 위해 사용하는 변수

 

catch (Exception) 모든 예외를 잡지만 예외 정보는 사용 안 함
catch (Exception ex) 예외를 잡고, 그 정보를 ex 변수로 활용 가능
ex.Message 오류 메시지
ex.StackTrace 어디서 오류가 났는지
ex.GetType() 오류의 종류
try
{
    int n = int.Parse("abc");
}
catch (Exception ex)
{
    // 1️⃣ 기본 메시지
    MessageBox.Show("오류 메시지: " + ex.Message);

    // 2️⃣ 예외 타입 확인
    Console.WriteLine("예외 타입: " + ex.GetType().Name);

    // 3️⃣ 어디서 오류가 났는지 추적
    Console.WriteLine("발생 위치: " + ex.StackTrace);
}