Open Yerimi11 opened 1 year ago
예외는 제어 흐름용으로 쓰여선 안 된다. 오직 예외 상황을 처리할 때만 사용해야 한다.
성능 개선을 목적으로 과하게 쓴 기법은 자제하라, 표준적이고 쉽게 이해되는 관용구를 사용해라.
잘 설계된 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) { }
이 코드는 위에서 우리가 잘못되었다고 판단했던 배열을 순회하던 반복문에서 예외를 사용한 것과 비슷하다.
반복문에서 예외를 사용하면 장황하고 헷갈리며 속도도 느리고, 엉뚱한 곳에서 발생한 버그를 숨기기도 한다.
상태 검사 메서드, 옵셔널, 특정 값 중 하나를 선택하는 지침
예전에 컬렉션을 안좋게 사용하는 것과 비슷하게 사용한 경험이 있는 것 같은데 표준 관용구를 이용해야겠네요
예외를 사용할 때 주의해야할 점에 대해 알게되었습니다
예외를 사용할때 유의할점을 알게 됐어요
69. 예외는 진짜 예외 상황에만 사용하라
예외는 제어 흐름용으로 쓰여선 안 된다. 오직 예외 상황을 처리할 때만 사용해야 한다.
성능 개선을 목적으로 과하게 쓴 기법은 자제하라, 표준적이고 쉽게 이해되는 관용구를 사용해라.
잘 설계된 API라면 클라이언트가 정상적인 제어 흐름에서 예외를 사용할 일이 없게 해야 한다.
특정 상태에서만 호출할 수 있는 '상태 의존적' 메서드를 제공하는 클래스는 '상태 검사' 메서드도 함께 제공해야 한다.
ex) 각각 상태 의존적 메서드, 상태 검사 메서드에 해당하는
Iterator 인터페이스의 next(상태 의존적 메서드)와 hasNext(상태 검사 메서드)를 제공한다.
그리고 별도의 상태 검사 메서드 덕분에 다음과 같은 표준 for 관용구를 사용할 수 있다
만약 Iterator가 hasNext를 제공하지 않았다면, 클라이언트가 그 일을 대신해야 했다.
이 코드는 위에서 우리가 잘못되었다고 판단했던 배열을 순회하던 반복문에서 예외를 사용한 것과 비슷하다.
반복문에서 예외를 사용하면 장황하고 헷갈리며 속도도 느리고, 엉뚱한 곳에서 발생한 버그를 숨기기도 한다.
상태 검사 메서드, 옵셔널, 특정 값 중 하나를 선택하는 지침