반응형
ReturnFromFinallyBlock
Avoid returning from a finally block, this can discard exceptions.
finally 블록에서 리턴하는 것을 자제하라. exception 처리가 무시될 수 있다.
샘플 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class Bar { public String foo() { try { throw new Exception( "My Exception" ); } catch (Exception e) { throw e; } finally { return "A. O. K."; // 이 곳에서 리턴 하는 경우 catch문이 무시되고 정상인 것처럼 리턴 } // 처리된다. } } |
다들 아시다시피 finally블럭 내에 있는 문장은 앞에 있는 try블럭이나 catch블럭에서 공통적으로 처리해주어야 할
부분을 처리하는 블럭이다. 주로 네트워크나 DB 커넥션 연결 하고 정상적인 프로세스 처리 후 혹은 예외가
발생하여 exception이 처리된 후 커넥션을 close하는 등의 용도로 많이 사용된다.
문제는 finally블럭이 있는 경우 try블럭이나 catch블럭에 return문이 있는 경우에도 finally블럭 내의 코드가
최종적으로 실행된다는 것이다.
위 샘플코드의 경우 try블럭과 catch블럭에서 모두 예외를 던지고 있지만 최종적으로는 “A.O.K”라는 문자열이
리턴되게 되고 이 함수를 호출한 곳에서는 정상적인 문자열 값을 받았으므로 예외에 대한 정보를 확인할 수
없게 되는 것이다.
따라서 가급적이면 finally블럭에는 return문을 넣지 않는 것이 좋다.
반응형
'Development > JAVA' 카테고리의 다른 글
[디비 파기 | PMD] BrokenNullCheck (0) | 2016.02.28 |
---|---|
[디비 파기 | PMD] MisplacedNullCheck (0) | 2016.02.28 |
[디비 파기 | PMD] AvoidDecimalLiteralsInBigDecimalConstructor (0) | 2016.02.28 |
[디비 파기 | PMD] ClassCastExceptionWithToArray (0) | 2016.02.28 |
[디비 파기 | PMD] UnconditionalIfStatement, CollapsibleIfStatements (0) | 2016.02.28 |