들어가며
메소드가 던지는 예외는 그 메소드를 올바로 사용하는데 아주 중요한 정보다. 따라서 각 메소드가 던지는 예외 하나하나를 문서화하는데 충분한 시간을 쏟아야 한다. 검사 예외는 항상 따로 선언하고 각 예외가 발생하는 상황을 자바독의 @Throws 태그를 사용하여 정확히 문서화 하자. 극단적인 예로 메소드가 Exception이나 Throwable을 던진다고 선언해서는 안된다. 메소드 사용자에게 예외에 대처를 위한 힌트를 제공하지 못할 뿐 더러 같은 맥락에섯 발생할 여지가 있는 다른 예외도 삼켜버린다. 단 main은 예외다. 오직 JVM만이 main을 호출하므로 Exception을 던져도 괜찮다.
비검사 예외도 문서화해두면 좋다. 발생 가능한 비검사 예외를 문서로 남기는 일은 인터페이스 메소드에서 특히 중요하다. 이 조건이 인터페이스의 일반 규약에 속하게 되어 그 인터페이스를 구현한 모든 구현체가 일관되게 동작하도록 해주기 때문이다.
메소드가 던질 수 있는 예외를 각각 @throws 태그로 문서화하되, 비검사 예외는 메소드선언의 throws 목록에 넣지 말자. 검사냐 비검사냐에 따라 사용자의 대처가 달라지므로 이 둘을 구분하는게 좋다. 자바독은 @throws에 와throws에도 명시한 예외와 @throws 태그에만 명시한 예외를 시각적으로 구분해준다.
한 클래스에 정의된 많은 메소드가 같은 이유로 같은 예외를 던진다면 그 예외를 클래스 설명에 추가하는 방법도 있다. NullPointerException이 가장 흔한 사례이다.