요약
Throwable -> Exception -> RuntimeException 등 다양한 예외
Throwable은 stackTrace 생성 등 예외에 필요한 다양한 일을 함
Exception은 예외 메시지를 받아 초기화할 수 있다
RuntimeException은 치명적이진 않은 예외를 뜻함.
RuntimeException은 치명적일 수 있는 에외로 반드시 처리를 해줘야 함.
Throwable
모든 에러와 예외의 부모 클래스다.
Throwable의 인스턴스만 JVM이나 throw 키워드를 통해 예외나 에러를 thrown 될 수 있다.
마찬가지로 catch문에 Throwable의 인스턴스만 올 수 있다.
Throwable 객체는 생성될 때 해당 예외가 발생하던 수행 스택의 스냅샷을 가지게 된다.
또한 다른 Throwable에 의해 생성된 경우 cause를 통해 알 수 있다.
cause는 상위 Exception가 throw 될 때 굳이 하위 레이어의 내용까지 전파하지 않기 위함이다.
사실 개발하는 입장에서는 자주 사용하진 않는다.
Error
Throwable을 상속받는 클래스로,
Try catch로 처리되어선 안될 정도로 심각한 문제를 일으킬 수 있는 문제들을 Error 클래스로 표현한다.
일반적으로 비정상적인 상태를 나타낼 때 주로 사용된다.
Exception
Throwable을 상속받는 클래스로,
Try catch 되어야할 이유가 있는 문제들을 Exception으로 표현한다.
이때 Checked Exception과 RuntimeException 두가지로 구분된다.
Checked Exception은 반드시 try catch 되거나 throws 되어야 컴파일 되는 예외이다.
RuntimeException은 try catch 되거나 throws 되지 않아도 되는 예외이다.