Java Exception 의 분류

bp.chys·2020년 3월 12일
1

Exception이란?

프로그램은 기능이 많아질수록 오류가 발생할 확률은 기하급수적으로 증가한다. 그렇기 때문에 자연스럽게 오류를 잘 처리하기 위한 방법들이 필요해지게 된다. 예외(Exception)를 처리한다란 프로그램을 만든 프로그래머가 상정한 정상적인 처리에서 벗어나는 경우에 이를 처리하기 위한 방법이다.

프로그램을 만들다 보면 수없이 많은 에러(Exception)가 난다. 물론 에러가 나는 이유는 프로그램이 오동작을 하지 않기 하기 위한 자바의 배려이다. 하지만 때로는 이러한 에러(Exception)를 무시하고 싶을 때도 있고, 에러(Exception)가 날 때 그에 맞는 적절한 처리를 하고 싶을 때도 있다. 이에 자바는 try ... catch, throw등을 이용하여 에러(Exception)를 처리 할 수 있도록 도와준다.

모든 클래스의 조상은 object클래스이고, 모든 예외의 최고 조상 클래스는 Exception 클래스이다.
Error는 시스템 레벨에서의 문제이기 때문에, 시스템에 변화를 주어 해결해야 하지만 Exception 은 개발자가 로직을 통해서 제어할 수 있다.

Exception은 또다시 checked Exceptionunchecked Exception으로 나뉘어진다. 둘을 나누는 기준은 Runtime Exception의 하위 클래스인가 그렇지 않은가 이다.
둘의 차이를 좀 더 자세히 알아보자.

Checked Exception

반드시 명시적으로 처리해야 하기 때문에 Checked Exception이라고 하며, 이를 올바로 처리하지 못하면 컴파일 에러가 발생한다. try catch를 통해 에러를 잡든 throws를 통해 다른 메서드로 예외를 던져야 한다.

checked exception은 주로 외부의 영향으로 발생하는 것으로 사용자가 존재하지 않는 파일 이름을 입력했더던가, 입력한 데이터 형식이 잘못된 경우에 발생하는 예외이다.

대표적인 CheckedException 클래스

  1. 메소드가 존재하지 않을 때
    → NoSuchMethodException
  2. 클래스가 존재하지 않을 때
    → ClassNotFoundException
  3. 객체의 복제가 불가능할 때
    → CloneNotSupportedException
  4. 클래스에 대한 부정적인 접근
    → IllegalAccessException
  5. 추상클래스나 인터페이스로부터 객체를 생성하고자 할 때
    → InstantiationException
  6. 입출력을 위한 파일이 없는 경우
    → IOException, FileNotFoundException

Unchecked Exception

명시적인 예외 처리를 강제하지 않는 특징이 있기 때문에 Unchecked Exception이라 하며, catch로 잡거나 다른 메서드로 예외를 던지지 않아도 상관이 없다.

unchecked exception(Runtime exception)은 컴파일 자체는 가능하지만, 배열의 범위를 벗어나거나, null 값을 참조하는 등의 상황에서 마주한다.

대표적인 UncheckedException 클래스

  1. 정수를 0으로 나누었을 경우
    → ArithmeticException
  2. 배열의 첨자가 음수 또는 범위를 벗어났을 경우
    → IndexOutOfBoundsException
  3. 부적절한 형변환이 일어나는 경우
    → FormatMismatchException
  4. null 참조
    → NullPointerException
  5. 배열의 크기를 지정할 때 음수의 사용
    → NegativeArraySizeException

예외발생시 트랜잭션 처리

기본적으로 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

profile
하루에 한걸음씩, 꾸준히

0개의 댓글