예외 처리를 하는데, 사용되는 키워드가 try, catch, finally 입니다. 


try{ } 은 예외가 발생될 것 같은 구문에 사용되어, JVM 에게 예외 발생 감시를 요청합니다. catch(XXXException e){ } 구문은 try 영역에서 예외가 발생되면, JVM 혹은, 개발자가 해당하는 Exception 인스턴스를 생성하고, catch 구문으로 제어권을 넘기면서 매개변수로 넘겨줍니다. catch 구문의 e 객체에 예외 상황과 관련된 정보들이 담겨지게 되고, 이를 가지고, catch 구문 내에서 로그를 찍는 등의 적절한 대응을 할 수 있습니다. 마지막으로, finally{ } 구문은 try ~ catch 다음에 위치하는 구문으로, 필수 항목은 아닙니다. try / catch 다음에 무조건 실행되는 영역이 finally 입니다. 예를 들어, 예외가 발생안한 정상적인 경우에는, try 구문만 실행될 것이고, 예외가 발생한 경우에는, try 구문을 실행하다가 catch 영역을 실행할 것인데, 이 2 가지 영역 어디를 실행했던 간에, 끝 마무리 처리를 해줘야 하는 경우에는 (ex) 리소스 해제) finally { } 에 그 처리를 넣어 주면 됩니다. 이 finally 구문은 try 와 catch 중간에 return 문이 삽입되더라도 반드시 finally 구문은 실행되는, 강제성이 부여된 공간입니다.


try 나 catch, finally 는 각각 단독으로는 사용될 수 없습니다. try 구문이 오면, 무조건 catch 혹은 finally 구문이 와야 합니다.


catch 영역을 통해서 원하는 Exception 에 대한 처리를 할 수 있는데, 이러한 catch 영역을 여러 개 정의하여 여러 개의 type 의 Exception 을 각각 구분하여 처리할 수 있습니다. 단, 이 때에는, 범위가 넓은 상위 Exception 은 무조건 하위 Exception 보다 밑에 정의되어야 합니다. 왜냐하면, 상위 Exception 이 하위 Exception 보다 위에 정의되면, try 구문에서 하위 Exception 이 발생했을 경우, catch 영역을 순차적으로 검사하면서 자기에 맞는 Exception 을 찾는데, 하위 Exception 가기 전에, 상위 Exception 에서 걸리기 때문에, 상위 Exception 영역에서 처리가 되고, 그 밑 catch 영역들은 건너뛰게 됩니다. (상속한 상위 Exception 또한, 하위 Exception 이라고 볼 수 있기 때문입니다.)


추가적으로, 예외가 발생했는데, 현재 메소드에 적절한 처리문 (try ~ catch 혹은 thrwos) 이 없으면, 그 라인 뒤를 실행하지 않고, 이 메소드를 호출한 부모 메소드로 제어권을 넘기게 됩니다.

by kkikkodev 2015. 6. 19. 16:46