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를 사용하지 않더라도 컴파일까지 가능하다.