diff --git "a/10\354\236\245/74_\353\251\224\354\204\234\353\223\234\352\260\200_\353\215\230\354\247\200\353\212\224_\353\252\250\353\223\240_\354\230\210\354\231\270\353\245\274_\353\254\270\354\204\234\355\231\224\355\225\230\353\235\274_\353\260\225\354\260\275\354\233\220.md" "b/10\354\236\245/74_\353\251\224\354\204\234\353\223\234\352\260\200_\353\215\230\354\247\200\353\212\224_\353\252\250\353\223\240_\354\230\210\354\231\270\353\245\274_\353\254\270\354\204\234\355\231\224\355\225\230\353\235\274_\353\260\225\354\260\275\354\233\220.md" new file mode 100644 index 0000000..abf1d3e --- /dev/null +++ "b/10\354\236\245/74_\353\251\224\354\204\234\353\223\234\352\260\200_\353\215\230\354\247\200\353\212\224_\353\252\250\353\223\240_\354\230\210\354\231\270\353\245\274_\353\254\270\354\204\234\355\231\224\355\225\230\353\235\274_\353\260\225\354\260\275\354\233\220.md" @@ -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 에 기재하지 마라. + + + + +