2025.08.26
✅ 1. 예외 처리 구문
🔹 finally 문
- 예외 발생 여부와 관계없이 항상 실행되는 블록
- 주로 자원 정리(파일 닫기, DB 연결 해제 등)에 사용됨
🔸 finally 안에 try-catch를 쓰는 이유
- 자원 정리 중에도 예외가 발생할 수 있음 (
close() 등)
- 예외가 발생해도 프로그램이 중단되지 않도록 중첩
try-catch로 안전하게 처리
try {
// 예외 발생 가능 코드
} catch (Exception e) {
// 예외 처리
} finally {
try {
// 자원 정리 코드
} catch (Exception e) {
// 자원 정리 중 예외 처리
}
}
✅ 2. 예외 선언과 처리
🔹 throws 키워드
- 메서드가 예외를 발생시킬 수 있음을 선언
- 예외를 직접 처리하지 않고 호출자에게 전가
public void readFile() throws IOException {
// 예외 발생 가능 코드
}
🔹 예외 처리 (try-catch) vs 예외 전가 (throws)
| 구분 |
예외 처리 (Handling) |
예외 전가 (Declaring) |
| 키워드 |
try-catch |
throws |
| 위치 |
메서드 내부 |
메서드 선언부 |
| 목적 |
예외를 직접 처리함 |
예외를 호출한 쪽으로 넘김 |
| 책임 |
내가 처리함 |
너가 처리해 하고 넘김 |
| 비유 |
"내가 문제 해결할게!" |
"이 문제는 너가 해결해줘!" |
✅ 3. throw vs throws 차이
| 구분 |
throw |
throws |
| 역할 |
예외를 직접 발생시킴 |
예외를 호출자에게 전가함 |
| 위치 |
메서드 내부에서 사용 |
메서드 선언부에서 사용 |
| 사용 예시 |
throw new 예외클래스(); |
public void method() throws 예외클래스 |
| 예외 개수 |
하나의 예외 객체만 던질 수 있음 |
여러 개의 예외 클래스 선언 가능 |
| 목적 |
실제로 예외를 발생시키는 행위 |
예외를 직접 처리하지 않고 넘기는 행위 |
✅ 4. 사용자 정의 예외
- 직접 예외 클래스를 만들어 의도적으로 예외를 발생 시킴