SSAFY11th-book-study / book-study

SSAFY 11기 6반의 '토비의 스프링 스터디'
0 stars 0 forks source link

[4.1.4] unchecked exception의 throws 선언 #40

Closed gmelon closed 7 months ago

gmelon commented 7 months ago

4.1 절에서 최근에는 런타임 예외의 사용이 보편화되고 있다고 합니다. checked/unchecked 관련해서 평소에 많이 궁금했던 내용이었는데 한방에 납득이 됐습니다. 그러면서 추가로, 런타임 예외는 unchecked 이므로 throws 해줄 필요가 없지만 클라이언트 개발자에게 해당 예외의 발생 가능성을 알리고, 처리가 필요하면 하라는 것을 표현한다고 합니다.

image

그런데 제 개인적인 경험으로는 단지 throws에 예외가 선언되어 있는 것만으로는 해당 예외를 처리해야겠다고 생각하기가 쉽지 않던데, throws 외에 런타임 예외의 처리를 강조하거나 명시해둘 방법이 있는지 궁금합니다.

sootudio commented 7 months ago

제가 찾아봤을 때는 javadoc 주석을 사용하여 메소드에서 발생하는 예외를 문서화하는 방법이 있다고 합니다.

https://www.oracle.com/kr/technical-resources/articles/java/javadoc-tool.html#throwstag

오라클 공식 문서에 보면, javadoc 주석에 @throws 태그를 사용하여 예외를 문서화하는 방법과 관련된 가이드가 나옵니다.

내용을 간단히 정리해 보면.

  1. 메소드 선언에서 throws 절과 javadoc에서의 @throws 태그 두 가지 방법으로 표현된다.

  2. @throws 태그의 목적: @throws 태그는 프로그래머가 반드시 처리해야 할 (checked exceptions의 경우) 또는 처리하고 싶을 수 있는 (unchecked exceptions의 경우) 예외를 나타낸다.

  3. 문서화해야 할 예외: @throws 태그를 사용하여 다음과 같은 예외를 문서화 한다.

    • 모든 checked exceptions

    • 호출자가 합리적으로 catch하고자 할 수 있는 unchecked exceptions

<예시 코드>

/**
 * 사용자를 추가하는 메소드입니다.
 * 이 메소드를 사용하여 새로운 사용자를 추가할 수 있습니다.
 * 만약 이미 등록된 사용자의 아이디를 입력할 경우, DuplicatedUserIdException이 발생합니다.
 * 
 * 
 * @param userId 추가할 사용자의 아이디
 * @throws DuplicatedUserIdException 사용자 아이디가 이미 등록되어 있는 경우 발생합니다.
 * @throws NullPointerException userId가 null인 경우 발생합니다.
 */
public void addUser(String userId) throws DuplicatedUserIdException, NullPointerException {
    // 메소드 구현
}