자바

자바 예외 처리 완전 정리

a-bell2 2025. 6. 5. 21:50

🌐 자바 예외 처리 완전 정리

📌 예외란?

자바에서 **예외(Exception)**는 개발자의 실수나 사용자의 잘못된 입력으로 인해 프로그램 실행 도중 발생하는 비정상적인 상황을 의미합니다.
이와 달리, 시스템 자체의 오류나 하드웨어 고장 등은 **에러(Error)**라고 부르며, 이는 개발자가 처리할 수 없습니다.

예외는 적절하게 처리하지 않으면 프로그램이 바로 종료되지만, 예외 처리 구문을 사용하면 프로그램 흐름을 유지할 수 있습니다.
자바 컴파일러는 일부 예외에 대해서는 반드시 처리하도록 요구합니다.


📂 예외의 분류

자바 예외는 크게 두 가지로 나뉩니다.

구분  설명  예시
일반 예외 (Checked Exception) 예외 처리 필수. 컴파일 시 검사됨 IOException, SQLException, ParseException 등
실행 예외 (Unchecked Exception) 예외 처리 선택. 컴파일 시 검사 안 됨 NullPointerException, ClassCastException, NumberFormatException 등

✅ 기준: RuntimeException을 상속받은 예외는 실행 예외, 그렇지 않으면 일반 예외입니다.


📚 예외 클래스 구조

자바는 모든 예외를 클래스 형태로 관리합니다.
JVM은 예외 발생 시 해당 예외 클래스의 객체를 만들어 전달합니다.

java.lang.Object  
 └── java.lang.Throwable  
     ├── java.lang.Error           (시스템 오류)  
     └── java.lang.Exception       (예외 처리 대상)
         ├── RuntimeException      (실행 예외)
         │   ├── NullPointerException  
         │   ├── IndexOutOfBoundsException  
         │   ├── NumberFormatException  
         │   └── ClassCastException  
         └── IOException 등        (일반 예외)

⚠️ 자주 발생하는 실행 예외

1. NullPointerException

  • null 객체를 참조할 때 발생
  • 예시: String str = null; str.length();

2. ArrayIndexOutOfBoundsException

  • 배열의 유효 인덱스 범위를 벗어난 경우

3. NumberFormatException

  • 숫자로 변환할 수 없는 문자열을 파싱할 때 발생
int num = Integer.parseInt("abc"); // 예외 발생

✅ 안전한 변환 예시

try {
    int num = Integer.parseInt("123A");
    System.out.println(num);
} catch (NumberFormatException e) {
    System.out.println("숫자 형식이 잘못되었습니다.");
}

🔁 ClassCastException

📌 개념

형변환 시 클래스 간 관계가 없거나 실제 객체의 타입이 다르면 발생합니다.

❌ 예외 발생 예시

Animal a = new Cat();
Dog d = (Dog) a;  // Cat을 Dog로 변환하려고 해서 예외 발생

✅ 안전하게 처리하는 법

if (a instanceof Dog) {
    Dog d = (Dog) a;
} else {
    System.out.println("Dog 타입이 아닙니다.");
}

💡 핵심 요약

항목  설명
예외란 프로그램 도중 발생하는 오류 상황. 처리 가능함
일반 예외 컴파일 시 예외 처리 필요
실행 예외 실행 중 발생, 예외 처리 선택 사항
대표 클래스 NullPointerException, ClassCastException, NumberFormatException 등
예외 방지 팁 형 변환 전 instanceof 사용, 문자열 유효성 검사 등

🔑 마무리

예외는 자바에서 안정적인 프로그램 실행을 위한 필수 요소입니다.
처음엔 번거롭게 느껴질 수 있지만, 예외 처리에 익숙해지면 프로그램의 신뢰성과 유지보수성이 크게 향상됩니다.