이번 절의 내용은 검사와 비검사 예외에 똑같이 적용된다.
✍ catch 블록을 비워두지 말자.
- 메소드에서 발생하는 예외를 무시하면, 그 메소드가 의도한대로 동작하지 않을 수 있고, 이로 인한 잠재적인 문제가 발생할 수 있다.
예시 1 - FileInputStream close 메소드
: 예외를 무시해도 되는 경우
- FileInputStream은 파일에서 데이터를 읽기 위한 입력 전용 스트림이다. 즉, 파일의 상태를 변경시키지 않는다.
- 따라서 이 스트림을 닫는 도중 예외가 발생해도 파일에 대한 복구 작업은 필요하지 않다.
@Slf4j
public class Main {
public void readFile() {
File file = new File("a.txt");
try (FileInputStream fis = new FileInputStream(file)) {
// 파일 내용을 읽는 작업, 데이터 처리 작업 등
} catch (IOException e) {
// 예외 처리
log.error("Error reading the file", e);
}
}
}
✍ 예외를 무시하기로 했다면 catch 블록 안에 그렇게 결정한 이유를 주석으로 남기고 예외 변수의 이름도 ignored로 변경하자.
- 일부 경우에는 예외를 무시해도 되지만, 그러한 결정은 신중하게 이루어져야 하며, 그 이유를 주석으로 명시해두자.
예시 2
Future<Integer> f = exec.submit(planarMap::chromatioNumber);
int numColors = 4; // 기본값. 어떤 지도라도 이 값이면 충분하다.
try {
numColors = f.get(1L, TimeUnit.SECONDS);
} catch(TimeoutException | ExecutionException ignored) {
// 기본 값을 사용한다(색상 수를 최소화하면 좋지만, 필수는 아니다).
}
'Language > Java' 카테고리의 다른 글
[effective java] 아이템 79. 과도한 동기화는 피하라. (0) | 2023.08.13 |
---|---|
[effective java] 아이템 78. 공유 중인 가변 데이터는 동기화해 사용하라. (0) | 2023.08.13 |
[effective java] 아이템 76. 가능한 한 실패 원자적으로 만들라. (0) | 2023.08.12 |
[effective java] 아이템 75. 예외의 상세 메시지에 실패 관련 정보를 담으라. (0) | 2023.08.12 |
[effective java] 아이템 74. 메서드가 던지는 모든 예외를 문서화하라. (0) | 2023.08.12 |