ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 체크예외와 언체크 예외(Checked, Unchecked Exception)란?
    Language/Java 2020. 4. 10. 11:18
    728x90
    반응형

    에러(error)예외(exception)의 차이는 알 것이다. 에러의 예시는 메모리 부족(OutofMemoryError)이나 스택오버플로우(StackOverflowError)처럼 복구하기 힘든 것이고, 예외는 상대적으로 덜 심각해 처리할 수 있는 것이다. 

     

     

    자바는 예외를 클래스로 만들어서 관리를 하고 전체 계층 구성도는 위와 같다.

    여기서 잘 봐야 할 점은 Exception 클래스RuntimeException 클래스를 주의 깊게 보자. 

     

    RuntimeException에 대해서 먼저 말하자면 말 그대로 프로그래머의 실수에 의해서 Runtime시에 예외가 발생할 수 있는 것들이다. (예를들어, 범위 밖의 인덱스를 참조한다던지, 분모를 0으로 나눈다던지 등이 있다)

    Checked와 Unchecked를 말하자면 Exception을 상속받는 클래스는 Checked예외이고, RuntimeException 클래스를 상속받는 클래스들은 Unchecked 예외라고 할 수 있다. 하지만 나는 Exception이 RuntimeException 부모 클래스인데 이게 무슨말일까?에 대해 고민했다. 다시 말하자면, Checked 예외는 RuntimeException 하위클래스를 제외한 나머지 클래스들을 의미하는 것이다.

     

     

     

     

    1. 체크예외(Checked Exception)

    위에서 말했듯이 체크예외는 반드시 예외처리를 해줘야 한다. 예시를 들어보겠다. 

     

    위처럼 RuntimeException 하위 클래스는 아니고 Exception 하위클래스인 InterruptedException 클래스는 반드시 예외처리를 해야 한다는 것을 알 수 있다. 이번엔 InterruptedException이 발생할 수 있는 메소드를 한번 보자.

     

    Object의 하위클래스인 wait() 클래스를 보면 throws InterruptedException를 볼 수 있다.

    이것의 의미는 이 메소드에서는 InterruptedException이 발생 할 수 있으니, 이 메소드를 호출하고자 하는 메소드에서는 InterruptedException을 처리해주어야 한다는 뜻이다.

     

     

     

    2. 언체크예외(Unchecked Exception)

    이번에는 RuntimeException 하위클래스이기 때문에 예외처리를 해주지 않아도 된다.

    그렇기 때문에 wait()메소드에서 IllgalMonitorStateException을 처리해주지 않은 것이다.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Test {
        public static void main(String[] args) {
            try {
                int[] arr = new int[10];
                System.out.println(arr[0]);
            } catch (ArrayIndexOutOfBoundsException ae) {
                 . . . 
            }
            catch (NullPointerException ne) {
                . . .
            }
        }
    }
     
     

     

    만약에 RuntimeException 클래스들에 속하는 예외가 발생할 가능성이 있는 코드에도 예외처리를 필수로 해야한다면, 위와 같이 참조 변수와 배열이 사용되는 모든 곳에 예외처리를 해주어야 할 것이다.

     

    반응형

    댓글

Designed by Tistory.