try ~ catch 문은 예외(exception) 처리를 해줘서, 원하는 결과가 아닌 예외적인 상황(대부분 에러)이 발생했을 때 이를 처리할 수 있도록 해 준다.
try ~ catch 문에서 finally 는 예외가 발생하던 하지 않던 반드시 처리해줘야 하는 부분을 기술할 때 쓰인다. 예를 들어 네트워크에서 커넥션(connection) 을 받아왔다가 닫아줘야 하는 경우 connection.close() 를 finally 문 내에 선언해 줌으로써 예외가 발생하던 하지 않던 간에 열어줬던 커넥션을 꼭 닫아주도록 한다. (커넥션이라 함은, 네트워크 상에서 원거리에 있는 다른 프로세스와 통신을 하기 전에 먼저 나와 연결되도록 해야하는데, 그렇게 해서 연결된 그 연결을 connection 이라고 한다. 그러므로, 커넥션을 열어주고, 할 일이 끝나면 커넥션을 닫아준다는 식으로 표현되는 것이다.)
자, 그럼 과연 try ~ catch 문 안에서 리턴문이 있으면 어떻게 될까?? 간단한 것이므로 실험을 해봤다 아래는 소스코드.
public class TestJava {
public boolean test(int i){
try {
System.out.println("i : " + i);
if(i == 1)
throw new Exception();
return true;
}
catch (Exception e) {
System.out.println("exception");
return false;
}
finally{
System.out.println("finally");
}
}
public static void main(String args[]) throws InterruptedException {
TestJava java = new TestJava();
java.test(0);
System.out.println("==========================================");
java.test(1);
}
}
보는 바와 같이 test(int i) 메소드 안에서 전달되는 i 의 값을 출력 시킨 후, i 의 값에 따라 1이면 익셉션을 발생시켜 주고, 1이 아닐 경우 true 를 바로 리턴한다. 그리고 익셉션이 발생한 경우 catch 문에서 익셉션을 잡아서 "exception" 이라고 출력한 뒤, false 를 리턴한다. 리턴한 뒤에도 finally 문이 실행되는지 확인해보기 위해 finally 문 안에서 "finally" 가 출력되도록 하였다. 그리고 실행 해본 결과는 아래와 같다.
return 에 상관없이 finally 문이 실행되는 것을 알 수 있다.
결론은
finally 문 내부에 있는 내용은 익셉션이 발생하든 하지 않든, 리턴문이 있던 없던 무조건 무조건 실행된다.
'Java' 카테고리의 다른 글
JAVA :: exception :: throw 문이 있는 try, catch, finally (0) | 2011.05.27 |
---|---|
Java :: JDBC 프로그래밍 :: 뼈대 보기 (0) | 2011.05.25 |
Java :: Date / Time format 에 관하여 (0) | 2011.05.25 |