Skip to content

Commit

Permalink
[#74][B팀] 메서드가 던지는 모든 예외를 문서화하라
Browse files Browse the repository at this point in the history
[#74][B팀] 메서드가 던지는 모든 예외를 문서화하라
  • Loading branch information
ksy90101 authored Mar 27, 2021
2 parents acf739d + dd5ace6 commit 35ff841
Showing 1 changed file with 53 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# 아이템74. [메서드가 던지는 모든 예외를 문서화하라](https://github.com/Meet-Coder-Study/book-effective-java/issues/74)



메서드가 던지는 예외의 설명은 어디에 중요할까? 문서화를 할 때, 메서드를 올바르게 사용하기 위해서다.

따라서, 메서드가 던지는 모든 예외를 문서화하는 것이 중요하다.



**체크 예외는 항상 개별적으로 선언하라, 또한 어떠한 조건에서 예외가 발생하는지 기재하라**

- javaDoc의 `@throws` 태그를 달아서 예외가 발생하는 조건을 설명하면 된다.
- 여러 예외를 하나의 슈퍼 클래스 예외로 선언하지 마라. (`Exception`, `Throwable` 이 가장 대표적임)
- 단 하나의 예외 사항이 있다면, main 함수에서 던지는 `Exception` 이나 `Throwable` 이 있다.



언체크 예외는 다룰 수가 없다. 어떻게 문서화 해야할까?

- 잘 문서화된 언체크 예외는 사전조건으로 설명하라.(아이템 56번)

- 아이템 56번에 따르면, 모든 public 메서드는 사전조건(precondtions)를 설명해야 한다.

- 특히, 인터페이스의 메서드가 던질 수 있는 언체크 예외를 문서화하는 것이 중요하다.



**Javadoc의 @throws 태그를 사용하여 체크 예외에 대한 설명을 하라, 다만 언체크 예외에 throws 키워드를 사용하면 안된다.**

- 만약 언체크 예외를 Javadoc의 `@throws` 태그로 명시하였다면, 예외가 체크되지 않았다는 강력한 시각적 암시를 나타낸다.



**하나의 클래스의 여러 메서드가 던지는 예외가 같은 이유로 설명된다면, 클래스 수준의 문서화 주석을 남겨라**

- 가장 대표적인 예는 `NullpointerException` 일 것이다.
- 예를 들어, "이 클래스의 모든 메서드는 NullPointerException을 던질 수 있음" 이라고 설명하면 된다.



## 정리

- 메서드가 던질 수 있는 모든 예외에 대해 문서화하라.
- 구현 메서드(concret method) 뿐 만아니라, 추상 메서드(abstract method)의 예외 또한 문서화를 해야 한다.
- 문서화를 할 때, Javadoc의 `@throws ` 키워드를 사용하라
- 메서드의 throws에 슈퍼클래스 하나로 예외를 던지지마라
- 언체크 예외는 throws 에 기재하지 마라.





0 comments on commit 35ff841

Please sign in to comment.