[Java] 예외, Error, Runtimeexception

개발자 | 2013. 2. 27. 20:15

예외(Exception)란 컴파일 오류와 달리 컴파일 시 발생하는 것이 아니라, 프로그램 실행 중에 발생하는 "어떤 비정상적인 동작"을 말한다.

  • 읽기전용으로 파일을 열려고 했으나, 해당 파일이 없는 경우
  • 네트웍으로 데이터 전송 중 네트웍의 동작에 이상이 발생한 경우
  • Array 크기를 벗어나는 인덱스를 사용한 경우

컴파일 시 발생하는 명백한 오류(Error)와 달리 프로그램의 실행 중에 발생하는 것으로 자바에서는 이들을 구분하여 처리하는 기능을 제공하고 있다.

발생된 예외를 효율적으로 즉, 프로그램이 죽지 않도록 적절히 처리하는 기능을 제공하려면, 중간의 메소드가 이 예외를 잡아(catch)서 처리해주면 된다.
* 메소드를 호출한 최상위의 쓰레드까지 전파되고 그 쓰레드가 종료된다.

즉, 예외의 발생(throw)은 현재 처리 중인 메소드 내에서 발생한 경우도 있지만, 자신이 부른 하위 메소드에서 발생하여 전파되어 올라온 것들도 있을 수 있는 것이다.
이렇게 발생된 예외(Exception)" 자체는 정수와 같은 변수가 아니라 클래스 중 하나인데 모두 java.jang.Throwble 클래스로부터 상속된다.

Throwble

  • Error : 심각한 오류(컴파일 시 확인)
    • 시스템상의 결함이 발생하여 프로그램이 더 이상 진행하지 못할 정도의 상황이 된 것
    • 메모리 부족, 클래스 없음
  • Exception : 환경상의 잘못으로 인한 예외(ex. 파일 없음 등)
    • 프로그램을 잘못 작성하여 발생하는 예외가 아니라 I/O 문제, 네트웍 다운, 잘못된 이름 입력 등 환경이 잘못되어 발생하는 예외를 말하며, 이를 확인예외(Checked exception)라고 한다. 이러한 확인예외는 발생할 가능성이 있는 것이므로 이에 대한 처리 방법은 "반드시" 구현해 두어야만 한다.
    • 확인예외의 처리방법은 프로그래머가 항상 구체적으로 기술해야 한다.
    • 이러한 확인예외 처리방법
      • try/catch 를 이용하여 구체적으로 기술하는 방법
      • 상위메소드에게 예외발생을 알리는(throws) 방법
  • RuntimeException : 프로그램 상의 오류로 인한 예외
    • 프로그램을 잘못 작성하여 발생하는 예외로서 Array 경계를 넘은 경우, 조건문의 처리를 잘못한 경우 등이 해당된다.
    • 이것은 프로그램을 오류없이 작성하였다면 발생하지 않게 되는 예외이므로 이러한 예외의 처리를 자바가 반드시 요구하지는 않는다.
    • 그러나 ArithmeticException 과 같은 RuntimeException 예외는 처리해 두면 편리하다.
,