프로그램은 기능이 많아질수록 오류가 발생할 확률은 기하급수적으로 증가한다. 그렇기 때문에 자연스럽게 오류를 잘 처리하기 위한 방법들이 필요해지게 된다. 예외(Exception)를 처리한다란 프로그램을 만든 프로그래머가 상정한 정상적인 처리에서 벗어나는 경우에 이를 처리하기 위한 방법이다.
프로그램을 만들다 보면 수없이 많은 에러(Exception)가 난다. 물론 에러가 나는 이유는 프로그램이 오동작을 하지 않기 하기 위한 자바의 배려이다. 하지만 때로는 이러한 에러(Exception)를 무시하고 싶을 때도 있고, 에러(Exception)가 날 때 그에 맞는 적절한 처리를 하고 싶을 때도 있다. 이에 자바는 try ... catch, throw등을 이용하여 에러(Exception)를 처리 할 수 있도록 도와준다.
모든 클래스의 조상은 object클래스이고, 모든 예외의 최고 조상 클래스는 Exception 클래스이다.
Error
는 시스템 레벨에서의 문제이기 때문에, 시스템에 변화를 주어 해결해야 하지만 Exception
은 개발자가 로직을 통해서 제어할 수 있다.
Exception은 또다시 checked Exception과 unchecked Exception으로 나뉘어진다. 둘을 나누는 기준은 Runtime Exception
의 하위 클래스인가 그렇지 않은가 이다.
둘의 차이를 좀 더 자세히 알아보자.
반드시 명시적으로 처리해야 하기 때문에 Checked Exception이라고 하며, 이를 올바로 처리하지 못하면 컴파일 에러가 발생한다. try catch를 통해 에러를 잡든 throws를 통해 다른 메서드로 예외를 던져야 한다.
checked exception은 주로 외부의 영향으로 발생하는 것으로 사용자가 존재하지 않는 파일 이름을 입력했더던가, 입력한 데이터 형식이 잘못된 경우에 발생하는 예외이다.
명시적인 예외 처리를 강제하지 않는 특징이 있기 때문에 Unchecked Exception이라 하며, catch로 잡거나 다른 메서드로 예외를 던지지 않아도 상관이 없다.
unchecked exception(Runtime exception)은 컴파일 자체는 가능하지만, 배열의 범위를 벗어나거나, null 값을 참조하는 등의 상황에서 마주한다.
예외발생시 트랜잭션 처리
기본적으로 Checked Exception은 예외가 발생하면 트랜잭션을 roll-back하지 않고 예외를 던져준다. 하지만 Unchecked Exception은 예외 발생 시 트랜잭션을 roll-back한다는 점에서 차이가 있다.
트랜잭션의 전파방식 즉, 어떻게 묶어놓느냐에 따라서 Checked Exception이냐 Unchecked Exception이냐의 영향도가 크다. roll-back이 되는 범위가 달라지기 때문에 개발자가 이를 인지하지 못하면, 실행결과가 맞지 않거나 예상치 못한 예외가 발생할 수 있다. 그러므로 이를 인지하고 트랜잭션을 적용시킬 때 전파방식(propagation behavior)과 롤백규칙 등을 적절히 사용하면 더욱 효율적인 애플리케이션을 구현할 수 있다.
참고자료
http://www.nextree.co.kr/p3239/
https://www.opentutorials.org/module/2495/14145