[JAVA] 11 예외 처리(Exception)

[JAVA] 11 예외 처리(Exception)

예외(Exception)는 프로그램 실행 중 발생할 수 있는 오류 상황을 의미한다. 자바는 예외를 객체로 처리하며, 비정상 종료를 막고 흐름을 제어하기 위해 예외 처리 문법을 제공한다.


1. 예외란

예외는 컴파일은 정상적으로 되지만, 실행 중 예상치 못한 상황이 발생했을 때 나타난다.

int a = 10 / 0; // ArithmeticException

예외를 처리하지 않으면 프로그램은 즉시 종료된다.


2. 예외와 오류(Error) 차이

  • Exception : 프로그램에서 처리 가능한 문제
  • Error : 시스템 레벨 문제, 일반적으로 처리 불가
OutOfMemoryError

Error는 예외 처리 대상이 아니다.


3. 예외 처리 기본 구조

try {
    // 예외 발생 가능 코드
} catch (Exception e) {
    // 예외 처리
} finally {
    // 항상 실행
}
  • try : 예외가 발생할 수 있는 코드
  • catch : 예외 발생 시 처리
  • finally : 예외 발생 여부와 관계없이 실행

4. try-catch 사용 예제

try {
    int result = 10 / 0;
    System.out.println(result);
} catch (ArithmeticException e) {
    System.out.println("0으로 나눌 수 없습니다.");
}

예외가 발생하면 try 블록 이후 코드는 실행되지 않고, catch 블록으로 이동한다.


5. 다중 catch

try {
    String s = null;
    System.out.println(s.length());
} catch (NullPointerException e) {
    System.out.println("null 접근");
} catch (Exception e) {
    System.out.println("기타 예외");
}

구체적인 예외를 먼저 작성해야 한다.


6. finally 블록

try {
    System.out.println("실행");
} catch (Exception e) {
    System.out.println("예외");
} finally {
    System.out.println("항상 실행");
}

finally는 예외 발생 여부와 관계없이 실행된다.


7. throws 키워드

메서드에서 예외를 직접 처리하지 않고, 호출한 쪽으로 넘길 수 있다.

static void readFile() throws Exception {
    // 예외 발생 가능 코드
}

throws는 예외를 처리하는 것이 아니라, 책임을 위임하는 것이다.


8. throw 키워드

의도적으로 예외를 발생시킬 수 있다.

if (age < 0) {
    throw new IllegalArgumentException("나이는 음수가 될 수 없음");
}

throw 이후 코드는 실행되지 않는다.


9. checked 예외와 unchecked 예외

checked 예외

  • 컴파일 시점에 처리 강제
  • 반드시 try-catch 또는 throws 필요
IOException

unchecked 예외

  • RuntimeException 계열
  • 처리 강제되지 않음
NullPointerException
ArrayIndexOutOfBoundsException

10. 예외 클래스 계층

Object
 └ Exception
    └ RuntimeException

RuntimeException을 상속한 예외들은 unchecked 예외에 해당한다.


11. 사용자 정의 예외

class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}
throw new MyException("사용자 정의 예외");

의미 있는 예외를 직접 정의할 수 있다.


12. 예외 처리 정리

  • 예외는 실행 중 발생하는 문제다.
  • try-catch로 프로그램 종료를 방지한다.
  • throws는 예외 처리 책임을 넘긴다.
  • throw는 예외를 직접 발생시킨다.
  • checked / unchecked 예외를 구분해야 한다.

정리

  • 예외 처리는 안정적인 프로그램을 위한 필수 요소다.
  • 모든 예외를 무작정 잡는 것은 바람직하지 않다.
  • 의미 있는 위치에서 처리하거나 위임하는 것이 중요하다.