try ~ catch 문은 예외(exception) 처리를 해줘서 원하는 결과가 아닌 예외적인 상황(에러)이 발생했을 때

이를 처리할 수 있도록 해 준다.

 

try ~ catch 문에서 finally 는 예외가 발생하던 하지 않던 반드시 처리해줘야 하는 부분을 기술할 때 쓰인다. 

예를 들어 네트워크에서 커넥션(connection) 을 받아왔다가 닫아줘야 하는 경우 connection.close() 를  

finally 문 내에 선언해 줌으로써 예외가 발생하던 하지 않던 간에 열어줬던 커넥션을 꼭 닫아주도록 한다.

 

* 커넥션(connection)은 네트워크 상에서 원거리에 있는 다른 프로세스와 통신을 하기 전에 먼저 나와 연결되도록 통신을 맺은것을 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" 가 출력되도록 하였다.

그리고 실행 해본 결과는 아래와 같다.

throw 에 상관없이 finally 문이 실행되는 것을 알 수 있다.

 

finally 문 무조건적으로 익셉션에 걸리든 안걸리든 마지막에는 무조건 실행이 된다.

그래서 위에 코드를 주로 DB와 커넥션을 연결하고 처리한 후 커넥션을 종료 할때 주로 많이 사용 되는 코드이다.

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기