API 설계자가 메서드 선언에 예외를 명시하는 까닭은 그 메서드를 사용할 때 적절한 조치를 취해달라고 말하는 것이다.
해당 메서드 호출을 try문으로 감싼 후 catch 블록에서 아무 일도 하지 않으면 예외는 아주 쉽게 무시된다.
catch 블록을 비워두면 예외가 존재할 이유가 없어진다.
예외를 무시해야 할 때
FileInputStream을 닫을 때
- 입력 전용 스트림이므로 파일의 상태를 변경하지 않았으니 복구할 것이 없으며, 스트림을 닫는다는 건 필요한 정보는 이미 다 읽었다는 뜻이니 남은 작업을 중단할 이유도 없다.
예외를 무시하기로 했다면 catch 블록 안에 그렇게 결정하기로한 이유를 주석으로 남기고 예외 변수의 이름도 ignored로 바꾸자.
public class IgnoredExceptionExample {
public static void main(String[] args) {
try (FileInputStream fileInputStream = new FileInputStream("example.txt")) {
// 파일 읽기 코드
int data;
while ((data = fileInputStream.read()) != -1) {
// 파일 데이터 처리
System.out.print((char) data);
}
} catch (IOException ignored) {
// 예외 무시
// 예외 무시의 이유에 대한 주석
System.out.println("Exception occurred but ignored.");
}
}
}
예외를 적절히 처리하면 오류를 완전히 피할 수도 있고, 무시하지 않고 바깥으로 전파되게만 놔둬도 최소한 디버깅 정보를 남긴 채 프로그램이 신속히 중단되게는 할 수 있다.
'Java > Effective Java' 카테고리의 다른 글
[Effective Java] Item 79. 과도한 동기화는 피하라 (0) | 2023.08.20 |
---|---|
[Effective Java] Item 78. 공유 중인 가변 데이터는 동기화해 사용하라 (0) | 2023.08.13 |
[Effective Java] Item 76. 가능한 한 실패 원자적으로 만들라 (0) | 2023.08.12 |
[Effective Java] Item 75. 예외의 상세 메시지에 실패 관련 정보를 담으라 (0) | 2023.08.12 |
[Effective Java] Item 74. 메서드가 던지는 모든 예외를 문서화하라 (0) | 2023.08.11 |