티끌모아부자

[java] try-catch에서 exception과 throwable 본문

IT-JAVA/JAVA

[java] try-catch에서 exception과 throwable

실천합시다 2017. 7. 18. 17:33

throwable 과 exception
catch에서 무엇이다른가.

일반 어플리케이션에서는 크게 문제가 없다.
하지만 프레임워크 수준의 코드라고 가정해보자.
동적로딩, 외부클래스 참조 등 다양한 환경에서 여러가지 exception이 발생할 수 있는 경우라면?
예를 들면 


1번 case)

public static void main(String[] args) throws Exception {
 try{
  main(null);
 }catch(exception e){
  System.out.println("exception!");
  e.printStackTrace();
 } 

}


2번 case)

public static void main(String[] args) throws Exception {
 try{
  main(null);
 }catch(Throwable e){
  System.out.println("throwable!");
  e.printStackTrace();
 } 

}

 

결과적으로 재귀호출에 의해 StackOverflowError가 발생하고 프로그램이 정지하는건 같지만,
위 두소스 코드는 큰 차이점을 가진다. 에러메시지를 보면 다음과 같음.

 


1. exception으로 catch할 경우
 Exception in thread "main" java.lang.StackOverflowError
 (stackTrace....)

 

 

2. throwable으로 catch할 경우
 java.lang.StackOverflowError
 throwable!
 (stackTrace....)

 

 

 

이 두 결과의 차이는 에러추척에서 좀 중요하지 않을까? 

exception으로 catch할경우 error에 대해서 명확하게 이력을 남기는 것이 힘들다.

단순 어플리케이션 소스가 아니라 시스템쪽에 가까운 소스들을 작성한다면, 다양한 상황에 대한 이력이나 처리를 고려해야한다.

Exception이라면 처리가 불가능하다. 소스의 가독성, Exception 종류에 따른 상세처리등을 한 후에 마지막에 예기치 못한 상황에 대한 처리로 쓰는 것이 좋을 것으로 판단된다.

 

exception과 throwable은 기본인데 바보같군...


 

 

 

 

Comments