brunch

You can make anything
by writing

C.S.Lewis

by 이승현 Sep 03. 2018

예외(Exceptions)

#59 checked 예외의 불필요한 사용을 피하자

Effective Java - 예외(Exception)


#59 checked 예외의 불필요한 사용을 피하자


checked 예외는 프로그래머가 직접 try-catch문이나 throws 키워드를 통해 처리해야 합니다.

이 checked 예외가 많아지면, 둘 중 어떤 방식으로 해도 프로그래머에겐 큰 부담입니다.


이 부담을 줄이기 위한 방법에 대해 알아보겠습니다.



만약 아래와 같이 checked 예외를 catch문에서 새로운 예외로 throw 하거나, 아무런 처리를 못한다면, checked 예외 처리가 아무런 의미가 없습니다.

try {
    // 
} catch(TheCheckedException e) {
    throw new AssertionError();
}
try {
    // 
} catch(TheCheckedException e) {
    e.printStackTrace();
    System.exit(1);
}




무의미한 checked 예외는 unchecked 예외로 바꾸는 게 더 적합합니다.

// checked 예외를 사용한 메서드 호출
try {
    obj.action(args);
} catch(TheCheckedException e) {
    // 예외 처리...
}


checked 예외를 unchecked 예외로 바꾸는 한 가지 방법은, 예외를 발생시키는 메서드를 두 개의 메서드로 쪼개는 것입니다.


- 첫 번째 메서드는 예외가 생겼는지 판단하는 boolean 값을 반환하는 상태-검사 메서드입니다.

- 두 번째 메서드는 상태-검사 메서드의 결과를 기반으로 동작하는 메서드입니다.

// 상태-검사 메서드와 unchecked 예외를 사용한 메서드 호출
if (obj.actionPermitted(args)) {
    obj.action(args)
} else {
    // 예외 처리...
}


이러한 코드 변환은 깔끔하진 않지만 checked 예외 처리가 없기 때문에 API 사용성은 좋아집니다.

하지만 멀티 스레드 환경에서 동기화하지 않고 동시적으로 상요한다면, 상태-검사 메서드의 값이 불안정하기 때문에 적합하지 않습니다.




매거진의 이전글 예외(Exceptions)
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari