JAVA

Exception handing

lshjju 2025. 10. 8. 21:16

사고가 났을 때 어떻게 수습하고 대처하는지 그 구체적인 방법들을 배워보겠습니다.

자바의 예외 처리(Exception Handling) 시스템은 사고를 처리하는 매뉴얼과 같습니다.



📘 예외 처리의 3가지 핵심 기술

1. Try-catch-finally block (기본 수습 과정)

  • 설명: 예외가 발생할 가능성이 있는 코드를 감시하고, 사고 발생 시 뒷수습을 한 뒤, 마지막 정리까지 하는 가장 표준적인 방법입니다.
  • 비유: 사고가 나면 보험사에 연락(try-catch)하고, 차 수리가 끝나면 렌터카를 반납(finally)하는 과정과 같습니다.
Java
 
public class TryCatchFinallyExample {
    public static void main(String[] args) {
        try {
            // 1. 위험한 코드 실행
            int result = 10 / 0; 
            System.out.println("결과: " + result);
        } catch (ArithmeticException e) {
            // 2. 사고 발생 시 수습 (예외 메시지 출력 등)
            System.out.println("사고 발생: 0으로 나눌 수 없습니다.");
        } finally {
            // 3. 예외 발생 여부와 상관없이 무조건 실행 (자원 정리)
            System.out.println("마지막 정리 작업을 수행합니다.");
        }
    }
}

2. Multiple catch block (다중 수습 센터)

  • 설명: 발생할 수 있는 사고의 종류가 여러 개일 때, 사고별로 다른 대책을 세우는 방법입니다.
  • 비유: 불이 나면 소방서에, 아프면 병원에 연락하는 것처럼 사고 타입에 맞춰 전문가를 부르는 것입니다.
  • 주의: 상위 클래스(Exception)일수록 아래쪽에 배치해야 합니다. (작은 사고부터 큰 사고 순으로 처리)
Java
 
public class MultipleCatchExample {
    public static void main(String[] args) {
        try {
            String str = null;
            System.out.println(str.length()); // NullPointerException 발생 가능
            
            int[] arr = new int[2];
            arr[5] = 10; // ArrayIndexOutOfBoundsException 발생 가능
        } catch (NullPointerException e) {
            System.out.println("객체가 비어있습니다.");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("배열 범위를 벗어났습니다.");
        } catch (Exception e) {
            System.out.println("기타 알 수 없는 사고가 발생했습니다.");
        }
    }
}

3. Throws keyword (예외 미루기 / 폭탄 돌리기)

  • 설명: 내가 직접 사고를 수습하지 않고, 나를 호출한 상위 메서드에게 예외 처리를 떠넘기는 방법입니다.
  • 비유: 현장 직원이 사고를 처리하기 힘들어 상사에게 "이런 문제가 생겼으니 보고드립니다!"라고 보고서를 올리는 것과 같습니다.
Java
 
public class ThrowsExample {
    public static void main(String[] args) {
        try {
            // 미뤄둔 숙제를 여기서 처리합니다.
            findClass();
        } catch (ClassNotFoundException e) {
            System.out.println("클래스를 찾을 수 없습니다: " + e.getMessage());
        }
    }

    // throws: "이 메서드는 이런 예외가 날 수 있으니 나를 부르는 쪽에서 대비해!"
    public static void findClass() throws ClassNotFoundException {
        Class cls = Class.forName("java.lang.String22");
    }
}

👨‍🏫 쉽게 이해하는 핵심 포인트

  1. finally의 위력: try나 catch 블록 안에서 return을 만나더라도, finally 블록은 프로그램이 끝나기 전에 반드시 실행됩니다. 파일을 닫거나 연결을 끊을 때 필수입니다.
  2. 다중 catch의 순서: 만약 맨 위에 catch (Exception e)를 두면 모든 예외가 거기서 걸려버려, 아래에 적은 세부적인 예외 처리 코드(NullPointerException 등)는 실행되지 않습니다.
  3. throw vs throws: throw는 내가 예외를 강제로 발생시키는 것이고, throws는 예외가 날 수 있음을 **공표(미룸)**하는 것입니다.

오늘의 요약

  • try-catch-finally: 직접 사고를 수습하고 마무리까지 책임진다.
  • Multiple catch: 다양한 사고 유형에 맞춰 맞춤 대책을 세운다.
  • throws: 내가 직접 처리하지 않고 나를 호출한 곳으로 보고한다.

이제 예외가 발생해도 당황하지 않고 대처할 수 있는 든든한 방어 기법들을 모두 배우셨습니다!


'JAVA' 카테고리의 다른 글

Promotion  (0) 2025.10.20
Inheritance  (0) 2025.10.09
JAVA Comments  (2) 2025.08.27
JVM  (0) 2025.08.27
Getter Setter  (0) 2025.08.25