자바에서 예외(Exception)는 프로그램 실행 중 발생할 수 있는 비정상적인 상황을 의미한다. 예외를 제대로 처리하지 않으면 프로그램이 비정상 종료될 수 있으므로, 안정성을 위해 예외 처리는 필수이다.
자바 예외는 크게 두 가지로 나뉜다.
| 종류 | 설명 |
|---|---|
| Checked Exception | 컴파일 시점에 예외 처리 여부를 확인 (예: IOException, SQLException) |
| Unchecked Exception | 실행 중(Runtime)에 발생, 예외 처리 강제 아님 (예: NullPointerException, ArrayIndexOutOfBoundsException) |
모든 예외는 Throwable 클래스의 하위이며, 다음과 같은 구조를 가진다.

자바에서 예외를 처리하는 기본 구조는 다음과 같다.
try {
// 예외가 발생할 수 있는 코드
} catch (ExceptionType e) {
// 예외 발생 시 처리할 코드
} finally {
// 예외 발생 여부와 관계없이 항상 실행 (선택)
}
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다.");
} finally {
System.out.println("예외 처리 완료");
}
| 키워드 | 설명 |
|---|---|
throw | 예외를 직접 발생시킬 때 사용 |
throws | 메서드 선언부에서 예외 발생 가능성을 명시 |
public void checkAge(int age) throws IllegalArgumentException {
if (age < 0) {
throw new IllegalArgumentException("나이는 음수가 될 수 없습니다.");
}
}
직접 예외 클래스를 정의해서 사용할 수도 있다.
class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
throw new MyException("커스텀 예외 발생");
| 키워드 | 설명 |
|---|---|
try | 예외가 발생할 수 있는 코드 블록 |
catch | 예외 발생 시 실행할 코드 블록 |
finally | 예외 발생 여부와 상관없이 항상 실행됨 |
throw | 예외를 직접 발생시킬 때 사용 |
throws | 메서드 선언 시, 해당 메서드에서 예외 발생 가능 알림 |
Exception catch 지양finally 블록은 리소스 해제용 (close(), disconnect() 등)에 활용