[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 예외를 구분해야 한다.
정리
- 예외 처리는 안정적인 프로그램을 위한 필수 요소다.
- 모든 예외를 무작정 잡는 것은 바람직하지 않다.
- 의미 있는 위치에서 처리하거나 위임하는 것이 중요하다.
'Computer Science > Java' 카테고리의 다른 글
| [JAVA] 예외가 터지면 코드 흐름은 어떻게 될까 (0) | 2026.02.13 |
|---|---|
| [JAVA] 12 IO / 파일 처리 / 문자열 처리 (0) | 2026.02.13 |
| [JAVA] 09 인터페이스 / 추상 클래스 / 오버라이딩 / 오버로딩 (0) | 2026.02.13 |
| [JAVA] 02 연산자와 형 변환 (0) | 2026.02.01 |
| [JAVA] 01 변수와 자료형 (0) | 2026.02.01 |