'finally'에 해당되는 글 1건

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문을 넣지 않는 것이 좋다.

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요