[EffectiveJava] item74 - 메서드가 던지는 모든 예외를 문서화하라
22 Jul 2023메서드가 던지는 예외는 그 메서드를 올바로 사용하는 데 아주 중요한 정보다. 따라서 각 메서드가 던지는 예외를 문서화 하는것은 중요하다.
검사 예외 문서화
검사 예외는 항상 따로따로 선언하고, 각 예외가 발생하는 상황을 자바독의 @throws 태그를 사용하여 정확히 문서화하자.
공통 상위 클래스 하나로 뭉뚱그려 선언하는 일은 삼가자. 극닥적인 예로 메서드가 Exception이나 Throwable을 던진다고 선언하면 안된다. 메서드 사용자에게 각 예외에 대처할 수 있는 힌트를 제공하지 못하기 때문이다.
이 규칙의 유일한 예외는 main
메서드로 main
은 오직 JVM만이 호출하므로 Exception을 던지도록 선언해도 괜찮다.
비검사 예외 문서화
자바 언어가 요구하는 것은 아니지만 비검사 예외도 검사 예외처럼 정성껏 문서화해두면 좋다.
비검사 예외는 일반적으로 프로그래밍 오류를 뜻하는데, 자신이 일으킬 수 있는 오류들이 무엇인지 알려주면 프로그래머는 자연스럽게 해당 오류가 나지 않도록 코딩하게 된다.
public 메서드라면 필요한 전제조건을 문서화해야 하며, 그 수단으로 가장 좋은 것이 바로 비검사 예외들을 문서화하는 거이다.
예외 문서화 방법
메서드가 던질 수 있는 예외를 각각 @throws 태그로 문서화하되, 비검사 예외는 메서드 선언의 throws 목록에 넣지 말자.
검사냐 비검사냐에 따라 API 사용자가 해야 할 일이 달라지므로 이 둘을 확실히 구분해주는 게 좋다.
자바독 유틸리티의 예외
자바독 유틸리티는 메서드 선언의 throws 절에 등장하고 메서드 주석의 @throws 태그에도 명시한 예외와 @throws 태그에만 명시한 예외를 시각적으로 구분해준다.
그래서 프로그래머는 어느 것이 비검사 예외인지를 바로 알 수 있다.
비검사 예외 문서의 한계
비검사 예외도 모두 문서화하라 했지만 현실적으로 불가능할 때도 있다.
만약 공들여 모든 예외를 공들여 문서화한 클래스가 있다 하자. 후에 이 외부 클래스가 새로운 비검사 예외를 던지게 수정된다면, 아무 수정도 하지 않은 우리 메서드는 문서에 언급되지 않은 새로운 비검사 예외를 전파하게 될것이다.
메서드 예외 문서화의 공통화
한 클래스에 정의된 많은 메서드가 같은 이유로 같은 예외를 던진다면 그 예외를 각각의 메서드가 아닌 클래스 설명에 추가하는 방법도 있다.
NullPointerException
이 가장 흔한 사례다.