Exception

Updated:

Exception, RuntimeException

Exception, RuntimeException의 개념과 사용 용도

  • 컴파일이 성공적으로 수행되어도 실행 도중에 발생할 수 있는 잠재적인 오류를 대비하기 위해 예외처리를 사용한다.
  • Excetipion
    • ClassNotFound (여기부터 IO까지 체크 예외)
    • CloneNotSupported
    • Instantiation
    • IO
    • RunTimeException (여기는 언체크 예외)
      • Arithmetic (0으로 나누기)
      • IllegalArgument
      • IndexOutOfBounds (배열)

1. throws(예외 회피하기), throw (예외 강제 발생)

  • 자바에서 throw를 통해 발생시킬 수 있는 예외는 세 가지다.

    1) Error

    • 시스템에 뭔가 비정상적인 상황이 발생했을 경우에 사용
    • 주로 자바 VM에서 발생시키는 것이고 애플리케이션 코드에서 잡으려고 하면 안된다.
    • 메모리 아웃이나 스레드Death 같은 에러이므로 try~catch로 안된다.
    • 이러한 에러 처리 신경은 쓰지 않아도 된다.

    2) Exception과 체크 예외

    • 에러가 아닌 Exception 클래스는 체크 예외와 언체크 예외로 구분
    • 체크 예외 : Exception 클래스의 서브 클래스이면서 RuntimeException 클래스를 상속하지 않은 것
    • 언체크예외 : RuntimeException 클래스를 상속한 클래스
    • 체크 예외가 발생할 수 있는 메서드를 사용할 경우 반드시 예외를 처리하는 코드를 함께 작성해야 한다.
    • 사용할 메서드가 체크 예외를 던진다면 이를 catch문으로 잡든지, 아니면 throws를 정의해서 메서드 밖으로 던져야 한다.
    • 그렇지 않으면 컴파일 에러가 발생

    3) RuntimeException과 언체크/런타임 예외

    • 명시적인 예외처리를 강제하지 않기 때문에 언체크 예외라고 불린다.
    • 에러와 마찬가지로 굳이 try나 throws로 선언하지 않아도 된다.
    • 런타임 예외는 주로 프로그램의 오류가 있을 때 발생하도록 의도된 것들이다.
    • 이런 예외는 코드에서 미리 조건을 체크하도록 주의 깊게 만든다면 피할 수 있다.
    • 피할 수 있지만 개발자의 부주의로 발생할 수 있는 경우 발생하도록 만든 것이 런타임 예외다.
  • 체크 예외, 언체크 예외의 차이점은 컴파일 시 예외 처리 체크를 하느냐 안하느냐 차이다.

  • 즉, 컴파일러는 런타임예외를 제외한 모든 예외 클래스들을 컴파일시 예외처리를 했는지 반드시 확인 한다.

  • 하지만 런타임예외 클래스 부류가 발생했을 때는 try를 사용하지 않더라도 컴파일까지 가능하다.