공식문서에는

에러로 던질 수 있는 모든 것들의 부모 클래스다.
try - catch로 핸들링하려면 반드시 Throwable을 상속받은 객체여야만 한다.
Error와 Exception 모두 Throwable을 상속받고 있다.
Throwable
├── Exception
│ ├── RuntimeException
│ │ ├── NullPointerException
│ │ ├── IllegalArgumentException
│ │ ├── IndexOutOfBoundsException
│ │ └── ...
│ ├── IOException
│ ├── SQLException
│ └── ...
└── Error
├── OutOfMemoryError
├── StackOverflowError
├── NoClassDefFoundError
└── ...
와 같은 형식으로 이루어진다
| 구분 | Exception | Error |
|---|---|---|
| 상속 구조 | Throwable → Exception | Throwable → Error |
| 목적 | 애플리케이션 예외 처리 | 시스템 또는 JVM의 치명적인 문제 |
| 회복 가능성 | 대부분 회복 가능 | 대부분 회복 불가능 |
| 처리 방법 | try-catch로 직접 처리 가능 | 일반적으로 try-catch로 처리하지 않음 |
| 예시 | IOException, SQLException, NullPointerException | OutOfMemoryError, StackOverflowError |
| 사용 대상 | 로직 상의 예외 상황 | 시스템/메모리/클래스 로딩 관련 문제 |