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