Rules of JAVA Exception
by Junseok Oh
1. 간단한 기능을 하는 메소드는 굳이 예외를 발생시키지 않고, C와 유사하게 boolean 형 또는 에러코드를 의미하는 int 형을 반환한다. (하지만 에러코드를 정의하는 게 비효율적일 수 있다.)
2. boolean/int 반환 메소드에서 Exception이 발생 시, error stack을 출력하고 해당 Exception에 해당하는 적절한 값을 리턴한다. (C 스타일)
3.
Exception은 메소드의 기능과 문맥에 맞는
다른 Exception으로 변환/추상화한다.
발생한 Exception에 해당하는 기능이 메소드에 암시되어 있다면, 그대로 bypass한다.
4.
제작하는 메소드가 다른 메소드의 기능을 얇게 추상화한다면,
모든 Exception을 bypass하게 throws Exception으로 정의할 수 있다.
boolean을 반환할지, bypass 할 지는 메소드의 기능이 critical한지 trivial한지에 따라 달라진다. 발생할 수 있는 Exception의 종류를 기준으로 삼지 않는다.
5.
파일 입출력을 암시하는 메소드 안에서 발생하는
IOException은 bypass한다.
하지만 메소드의 문맥에 따라 IOException을 다른
Exception으로 변환한다.
6. Exception을 던지는 경우, 되도록 Java에 정의되어 있는 표준 Exception을 사용한다.
7.
비록 귀찮더라도 너무 많은 코드를 try문으로
감싸는 것은 지양한다.
비록 귀찮더라도 구체적인 하위 Exception을
catch한다.
8. 되도록 Exception에 구체적인 에러 메시지를 포함시킨다.
9.
catch 블록에서 할 수 있는 작업은 복구/트레이스/새 Exception 발생/종료뿐이다. 그냥 지나치는 것은 지양한다.
finally 블록에서 할 수 있는 작업은 try/catch 블록에서의 작업에 대한 공통
마무리이다. finally 블록에서 메소드를 종료하는 것은 지양한다.
(try/catch 블록에 return이 있다면,
finally 블록 코드를 실행 후에 메소드를 종료하기 때문.)
10. (임시) 부모/자식 예외를 모두 catch하는 블록이 연속되는 경우, 반드시 자식 예외에 해당하는 catch 블록이 앞에 위치해야 한다.
will be continuously updated...