-
item 77 예외를 무시하지 말라책/이펙티브 자바 2022. 4. 23. 10:39
ITEM 77 예외를 무시하지 말라
예외를 무시하지 말라는 말은 당연한 이야기지만 사람들이 자주 어기고 있는 내용이다
API 설계자가 메서드 선언에 예외를 명시하는 이유는 그 메서드를 사용할 때 적절한 조치를 취해달라는 이야기다
API 설계자가 친절하게 써놓은 내용을 대충 듣지 말자
실제로 예외를 무시하는 일은 매우 쉽게 이루어 진다
// catch 블록을 비워버리면 예외가 무시된다 try { ... } catch (SomeException e){ }
예외는 문제 발생시 대처하는데 아주 중요한 요소인데 catch 블록을 비워두면 예외가 존재할 이유가 없다
- 비유하자면 화재 경보를 무시하는걸 넘어서 아예 꺼버려 다른 사람들도 화재 상황을 알지 못하게 하는 수준이다
- 빈 catch 블록을 목격한다면 항상 사이렌을 울려야 한다
예외를 무시해야 할 때도 있다
- 예로 FileInputStream을 닫을 때
- 입력 전용 스트림이라 파일의 상태를 변경하지 않았으니 복구 할 것이 없으며 스트림을 닫는다는건 핑료한 정보는 이미 다 읽었으니 남은 작업을 중단할 필요도 없다
- 혹시나 같은 예외가 자주 발생한다면 조사해 보는것이 좋을테니 파일을 닫지 못했다는 사실을 로그로 남기는 것도 좋다
예외를 무시하기로 했다면 catch 블록 안에 그렇게 결정한 이유를 주석으로 남기고 예외 변수의 이름도 ignored로 바꿔 놓도록 하자
이번 item의 내용도 검사, 비검사 예외와 똑같이 적용된다
예측할수 있는 예외 상황이거나 프로그래밍 오류거나 빈 catch 블록으로 못 본 척 지나치면 그 프로그램은 오류를 내재한 채 동작하게 된다
갑자기 어느 순간 문제의 원인과 아무 상관없는 곳에서 죽어버릴 수도 있으며 예외를 적절히 처리하면 오류를 완전히 피할 수도 있따
무시하지 않고 바깥으로 전파되게만 놔둬도 최소한 디버깅 정보를 남긴 채 프로그램이 신속히 중단되게 할 수 있다
'책 > 이펙티브 자바' 카테고리의 다른 글
item 79 과도한 동기화는 피하라 (0) 2022.04.23 item 78 공유 중인 가변 데이터는 동기화해 사용하라 (0) 2022.04.23 item 76 가능한 한 실패 원자적으로 만들라 (0) 2022.04.23 item 75 예외의 상세 메시지에 실패 관련 정보를 담으라 (0) 2022.04.22 item 74 메서드가 던지는 모든 예외를 문서화하라 (0) 2022.04.22 - 비유하자면 화재 경보를 무시하는걸 넘어서 아예 꺼버려 다른 사람들도 화재 상황을 알지 못하게 하는 수준이다