Error와 Exception
자바에서 오류와 에러는 둘 다 Throwable을 상속받고 있습니다. 자바의 예외는 아래 그림과 같은 계층구조를 가지고 있습니다.

이미지 출처: https://simplesnippets.tech/exception-handling-in-java-part-1/
Error
- 코드레벨에서 처리가 불가능한 문제 입니다.
- Error발생으로 인한 프로그램의 비정상적인 종료를 막을 수 없습니다.
Exception
- 코드레벨에서 처리가 가능한 문제 입니다.
- 자바에서는 Try-catch와 Throw를 통해 예외를 처리합니다.
Checked Exception(Compile Exception)
- 예외를 처리하는 코드가 없으면 컴파일이 진행되지 않습니다.
- 컴파일 단계에서 예외가 필요한지를 IDE가 판단해 줍니다.
Unchecked Exception(Runtime Exception)
- 예외를 처리하는 코드가 없더라도 컴파일은 실행됩니다.
예외 처리
try-catch
- try블록을 실행하는 도중 예외가 발생하면 거기에 맞는 예외를 JVM이 생성한 뒤 throw 합니다. 던진 예외를 받을 수 있는 catch블록에서 예외에 대한 처리가 일어납니다.
- finally: 예외의 발생여부와 상관 없이 무조건 실행되는 구문입니다. 또한 finally 이전에 return이 실행되더라도 finally를 수행한 뒤 return 한다는 특징을 가지고 있습니다.
throws
- 그자리에서 예외를 처리하지 않고 예외를 호출한 곳으로 예외를 돌려줍니다.
- throws는 예외가 발생한다는 걸 인지시켜주기 위해 사용하며, 여러 예외를 한 번에 처리할 수 있다는 장점이 있습니다.
- throws는 결국 예외처리의 책임을 누군가에게 떠넘기는 행위입니다. 만약 throws를 받은 곳에서 예외를 처리하지 않는다면 다시 한번 자신을 호출한 상위 메서드에 그대로 에러를 전달합니다. 그 어떤 곳에서도 예외가 처리되지 않으면 JVM이 해당 예외를 전달받은 뒤 프로그램은 종료됩니다.
throw
- 사용자가 고의로 에러를 발생시킬 때 사용합니다.
- 사용자 정의 예외에서 주로 사용됩니다.