티스토리 뷰
예외를 적절히 처리하면 오류를 완전히 피할 수도 있다.
무시하지 않고 바깥으로 전파되게만 놔둬도
최소한 디버깅 정보를 남긴 채 프로그램이 신속히 중단되게는 할 수 있다.
📢 catch문을 비워두지 말아라
API 설계자가 메서드 선언에 예외를 명시하는 까닭은, 그 메서드를 사용할 때 적절한 조치를 취해달라고 말하는 것이다.
따라서, 예외는 문제 상황에 대처하기 위해 존재하는데
catch 블록을 비워두면 예외가 존재할 이유가 없어진다.
예를 들면, 화재경보가 났는데 이 것을 꺼버려 다른 사람들이 화재경보를 못 듣는 경우와 같다.
물론 FileInputStream을 닫을 때 처럼 예외를 무시해야 할 때도 있지만,
예외를 무시하기로 했다면 catch 블록 안에 그렇게 결정한 이유를 주석으로 남기고 예외 변수의 이름도 ignored로 바꿔놓자.
Future<Integer> f = exec.submit(planarMap::chromaticNumber);
int numColors = 4; //기본값. 어떤 지도라도 이 값이면 충분하다.
try{
numColors = f.get(1L, TimeUnit.SECONDS);
} catch (TimeoutException | ExecutionException ignored){
//기본값을 사용한다 (색상 수를 최소화하면 좋지만, 필수는 아니다)
}
💡 정리
검사와 비검사 예외에 똑같이 적용되며, 예측할 수 있는 예외 상황이든 프로그래밍 오류든, 빈 catch 블록으로 못 본 척 지나치면 그 프로그램은 오류를 내재한 채 동작하게 된다.
그러다 어느 순간 문제의 원인과 아무 상관없는 곳에서 갑자기 죽어버릴 수도 있다.
그러니!!!
예외를 무시하지 말자!
728x90
'Programming > Effective Java' 카테고리의 다른 글
[이펙티브자바] Item 78. 공유 중인 가변 데이터는 동기화해 사용하라 (1) | 2022.08.25 |
---|---|
[이펙티브자바] Item 76. 가능한 한 실패 원자적으로 만들라 (2) | 2022.08.23 |
[이펙티브자바] Item 75. 예외의 상세 메시지에 실패 관련 정보를 담으라 (0) | 2022.08.23 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- springboot
- dfs
- subset
- BOJ
- 완탐
- IMAGE
- 운영체제
- EffectiveJava
- Retrofit2
- docker-compose
- 백준
- cicd
- 토큰기반인증
- OS
- 순열
- BFS
- 아이템61
- 이펙티브자바
- 완전탐색
- bruteforce
- 아이템59
- 알고리즘
- dp
- Container
- 조합
- 아이템60
- Java
- 그래프탐색
- DevOps
- docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함
250x250