되도록 표준 예외를 사용하자 & 추상화 수준에 맞는 예외를 던지자& 예외 상세 메시지에 실패 관련 정보를 담자.
되도록 표준 예외를 사용하자
표준 예외를 재사용하면 얻는게 많다. 이미 프로그래머들에게 익숙한 예외를 사용하기 떄문이다. 예를 들어 IllegalArgumentException, IllegalStateException,
ConcurrentModificationException 등이 있다.
추상화 수준에 맞는 예외를 던지자
수행하려는 일과 관련이 없어 보이는 예외가 나오면 당황스러울 것이다. 저수준 예외를 처리하지 않고 바깥으로 전파하면 일어나는 일 이다. 이는 내부 구현을 외부로 노출시키는 일이다. 또한 내부 구현과 사용을 결합시키게 되는 일이 된다. 따라서 다음 릴리즈에서 바꾸면 다른 예외가 튀어나와 기존 클라이언트 프로그램을 깨지게 할 수 있다.
차라리 이 때는 예외를 번역해서 던지자 예외 번역이란 저수준 예외를 받아서 고수준 예외로 다시 던지는 것을 의미한다. 예외를 번역할 때, 저수준 예외가 디버깅에 도움이 된다면 예외 연쇄(exceptionChaining)를 사용하는게 좋다.
예외 연쇄란 문제의 근본 원인 저수준 예외를 고수준 예외에 실어보내는 것이다. 무턱대로 예외를 전파하는 것보다 좋은 방법이지만 그렇다고 남용하면 안된다.
예외 상세 메시지에 실패 관련 정보를 담자.
예외는 stack trace를 자동 캡쳐 출력한다. 예외 분석을 위한 초석이 된다. 관련 데이터를 모두 담아야 하지만 꼭 장황할 필요는 없다. 문제를 분석하는 사람은 소스코드도 함께 보기 때문이다.
예외를 최종 클라이언트에게 보여줄 메시지로 생각하면 안 된다. 최종 사용자에게는 훨씬 더 의미있는 메시지가 중요하다.