오늘은 자바에서 예외처리에 대해서 정리해보겠습니다.
1. Exception(예외)이란?
프로그램 실행 중에 정상 흐름을 방해하는 문제 상황을 객체로 표현한 것이 예외입니다.
- 예외가 발생하면 JVM은 예외 객체를 던지고(throw),
- 현재 실행 흐름을 따라가며 잡을 수 있는 곳(catch)을 찾는 과정을 진행합니다.
- 아무도 못 잡으면 프로그램(해당 스레드)은 종료되고, 보통 스택 트레이스가 출력됩니다.
예외는 크게 3가지 계열로 많이 말합니다.
- Error: JVM/시스템 레벨(OutOfMemoryError 등) → 보통 애플리케이션에서 복구 대상 아님
- Exception: 애플리케이션이 다루는 예외
- 그 중 RuntimeException 계열은 Unchecked
- 나머지는 Checked
예외처리를 하는 3가지 방법
1. try-catch로 즉시 처리
예외가 발생할 수 있는 코드 주변에서 잡아서 복구/대체/로깅/사용자 메시지 처리 등을 합니다.
- 장점: 예외 발생 지점과 처리 지점이 가까워 이해 쉬움
- 단점: 너무 남발하면 코드가 지저분해짐
2. throws로 호출자에게 위임
현재 메서드에서 처리하지 않고 메서드를 호출한 쪽으로 넘기는 것을 말합니다.
- 장점: 하위 계층(DAO 등)에서 억지로 처리하지 않고 상위 계층에서 정책적으로 처리 가능
- 단점: 무책임하게 계속 던지기만 하면 결국 최상단에서 터짐
public void readFile() throws IOException {
// ...
}
3. finally / try-with-resources로 자원 정리
예외가 나든 말든 반드시 해야 하는 작업(파일/소켓/락 해제 등)을 보장합니다.
- finally: 항상 실행(단, JVM 강제 종료 등 특수 상황 제외)
- try-with-resources: AutoCloseable 자원을 자동으로 닫아줌
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
'Java' 카테고리의 다른 글
| [Java] equals() 와 hashCode() (0) | 2026.02.04 |
|---|---|
| [Java] Stream (0) | 2026.02.03 |
| [Java] GC (0) | 2026.01.30 |
| [Java] Synchronized에 대해 - 2 (0) | 2026.01.26 |
| [Java] Synchronized에 대해 (0) | 2026.01.23 |