Item71. 필요 없는 검사 예외 사용은 피하라

2022-03-06 17:35:03

#Java#Effective Java 3/E
  • 검사 예외를 제대로 활용하면 API를 사용하는 client가 예외에서 발생한 문제를 처리하여 프로그램의 안정성을 높일 수 있으나, 불필요한 검사 예외는 프로그램 복잡성만 늘린다.

예를 들면 다음과 같이 검사 예외를 던졌는데 client가 아래와 같이 처리해야 된다면 오히려 코드만 불필요하게 길게 만든다.

catch(TheCheckedException e){
    throw new AssertionError();
}
catch(TheCheckedException e){
    e.printStackTrace();
    System.exit(1);
}
  • 그외에 단점으로 검사 예외를 던지는 method는 Stream 안에서 직접 사용할 수 없다.

검사 예외를 회피하는 방법

  1. 적절한 결과 타입을 담은 Optional을 반환한다. 이 방법의 단점은 예외가 발생한 이유를 알려주는 부가정보를 client에게 전달해주지 못한다.

  2. 검사 예외를 던지는 method에 검사 예외를 발생하는 지 여부를 boolean으로 반환하는 상태 검사 method를 추가한다.

예를 들어 다음과 같은 비검사 예외를 던지는 method가 있다고 가정하자.

try{
    obj.action(args);
}catch(TheCheckedException e){
    //예외 상황 대처 
}

이를 아래와 같이 상태검사 method를 추가해서 예외상황일 경우의 로직을 else문제 작성해줄 수 있다.


if(obj.actionPermitted(args)){ // 상태 검사 method 
    obj.action(args);
}else{
    // 예외 상황 대처
}

이 방법은 앞선 Item69번의 상태검사method를 사용하면 안되는 상황을 유의해서 사용해야 한다 (ex) multi-thread 상황)

프로필 이미지
@chani
바둑 좋아하는 개발자의 의미있는 학습 기록을 위한 공간입니다.

댓글

이 게시글에 대한 의견을 공유해주세요!

댓글