Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

아이템 69. 예외는 진짜 예외 상황에만 사용하라 #69

Open
Yerimi11 opened this issue Apr 3, 2023 · 4 comments
Open

아이템 69. 예외는 진짜 예외 상황에만 사용하라 #69

Yerimi11 opened this issue Apr 3, 2023 · 4 comments
Assignees

Comments

@Yerimi11
Copy link
Contributor

Yerimi11 commented Apr 3, 2023

No description provided.

@Yerimi11
Copy link
Contributor Author

Yerimi11 commented Apr 3, 2023

69. 예외는 진짜 예외 상황에만 사용하라


  • 예외는 제어 흐름용으로 쓰여선 안 된다. 오직 예외 상황을 처리할 때만 사용해야 한다.

  • 성능 개선을 목적으로 과하게 쓴 기법은 자제하라, 표준적이고 쉽게 이해되는 관용구를 사용해라.

  • 잘 설계된 API라면 클라이언트가 정상적인 제어 흐름에서 예외를 사용할 일이 없게 해야 한다.

    특정 상태에서만 호출할 수 있는 '상태 의존적' 메서드를 제공하는 클래스는 '상태 검사' 메서드도 함께 제공해야 한다.

  • ex) 각각 상태 의존적 메서드, 상태 검사 메서드에 해당하는

    Iterator 인터페이스의 next(상태 의존적 메서드)와 hasNext(상태 검사 메서드)를 제공한다.

    그리고 별도의 상태 검사 메서드 덕분에 다음과 같은 표준 for 관용구를 사용할 수 있다

    //Iterator 표준 관용구 사용
    for(Iterator<Foo> i = collection.iterator(); i.hashNext();) {
      Foo foo = i.next();
      ...
    }

    만약 Iterator가 hasNext를 제공하지 않았다면, 클라이언트가 그 일을 대신해야 했다.

    // 컬렉션을 이런 식으로 순회하지 말 것
    try{
      Iterator<Foo> i = collection.iterator();
      while(true) {
        Foo foo = i.next();
        ...
      }
    } catch(NoSuchElementException e) {
    
    }

    이 코드는 위에서 우리가 잘못되었다고 판단했던 배열을 순회하던 반복문에서 예외를 사용한 것과 비슷하다.

    반복문에서 예외를 사용하면 장황하고 헷갈리며 속도도 느리고, 엉뚱한 곳에서 발생한 버그를 숨기기도 한다.

  • 상태 검사 메서드, 옵셔널, 특정 값 중 하나를 선택하는 지침

    • 외부 동기화 없이 여러 스레드가 동시 접근 가능하거나 상태가 변할 수 있다면 옵셔널을 사용한다.
    • 성능이 중요한 상황에서 상태 검사 메서드가 상태 의존적 메서드의 작업 일부를 중복 수행한다면 옵셔널 반환을 선택한다.
    • 그 외의 경우에는 상태 검사 메서드 방식이 더 낫다.

@Yerimi11 Yerimi11 self-assigned this Apr 3, 2023
@YunDaHyee
Copy link
Contributor

예전에 컬렉션을 안좋게 사용하는 것과 비슷하게 사용한 경험이 있는 것 같은데
표준 관용구를 이용해야겠네요

@jioome
Copy link
Contributor

jioome commented Apr 5, 2023

예외를 사용할 때 주의해야할 점에 대해 알게되었습니다

@kiki-sati
Copy link
Collaborator

예외를 사용할때 유의할점을 알게 됐어요

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants