기본 패턴
java
try {
Files.readString(path);
} catch (IOException e) {
System.out.println("읽기 실패: " + e.getMessage());
}설명
- Java 예외는 단순한 오류 신호가 아니라, 호출 체인 전체가 실패 가능성을 어떻게 다룰지 드러내는 설계 요소입니다.
- checked exception은 컴파일러가 처리 또는 전파를 강제하는 예외입니다. 보통 I/O처럼 복구 가능성이 있고 호출자가 대응을 고민해야 하는 문제에 자주 등장합니다.
- unchecked exception은
RuntimeException계열로, 컴파일러가 강제하지 않습니다. 주로 프로그래밍 오류나 잘못된 상태를 나타낼 때 많이 씁니다. try-catch는 여기서 처리하겠다는 뜻이고,throws는 호출자에게 책임을 넘기겠다는 뜻입니다. 어느 쪽이 맞는지는 "이 계층이 이 오류를 의미 있게 처리할 수 있는가"에 달려 있습니다.- Java 예외 학습의 핵심은 문법보다 책임입니다. 무조건 catch하는 것도, 무조건 throws하는 것도 모두 좋지 않습니다.
빠른 정리
| 개념 | 의미 |
|---|---|
| checked exception | 처리 또는 전파를 컴파일러가 강제 |
| unchecked exception | 런타임 오류 계열, 강제 없음 |
try-catch | 여기서 처리 |
throws | 호출자에게 책임 전달 |
| 선택 기준 | 이 계층이 복구나 의미 있는 변환을 할 수 있는가 |
주의할 점
예외를 catch만 하고 아무 조치 없이 삼키면 디버깅이 매우 어려워집니다. 반대로 모든 계층이 그대로 throws만 하면 어디서 어떤 의미로 실패하는지도 흐려질 수 있습니다.
참고 링크
2 sources