✅ Throwable 클래스
- Java 언어의 모든 오류 및 예외의 슈퍼 클래스
- Exception과 Error는 해당 클래스를 상속받는다.
✅ Error (에러)
자바프로그램이 실행되는 JVM환경에서 발생하는 문제이다.
시스템 레벨에서 발생한 에러는 개발자가 조치하기 어렵다.
- 개발자는 에러가 발생했다는 사실을 알 수는 있다.
- 아래는 대표적인 에러이다.
- OutOfMemoryError : JVM에 설정된 메모리의 한계를 벗어난 상황일 때 발생한다.
- 유명한 이펙티드자바 책에서는 에러가 발생한 경우, try-catch로 잡지 말라고 조언한다. 잡아도 득보다 실이 많다고 한다...
✅ Exception (예외)
개발자가 구현한 로직에서 발생하며, 개발자가 다른 방식으로 처리가능한 것들이다.
예외의 두가지 종류가 있다. (Checked, Unchecked)
✅ Checked Exception
컴파일 때 체크되고, 예외 처리가 필수이다.
처리하지 않으면 컴파일 되지 않는다.
- 사용자의 실수와 같은 외적인 문제로 발생하는 예외이다.
- 반드시 try-catch 구문으로 예외처리를 해야한다.
- RuntimeException 이외에 있는 모든 예외를 말한다.
- FileNotFoundException: 존재하지 않는 파일의 이름을 입력
- ClassNotFoundException: 실수로 클래스의 이름을 잘못 기재
- DataFormatException: 입력한 데이터 형식이 잘못된 경우
✅ Unchecked Exception (런타임예외)
컴파일 때 체크되지 않고, 런타임에 발생하는 예외이다.
명시적인 처리를 하지 않아도 된다.
- 개발자의 실수로 발생하는 예외이다.
- RuntimeException 하위의 모든 예외
- IndexOutOfBoundsException: 배열의 범위를 벗어남
- NullPointerException(NPE): 값이 null인 참조 변수의 멤버를 호출
- ClassCastException: 클래스 간의 형 변환을 잘못함
- ArithmeticException: 정수를 0으로 나누는 산술 오류
❓ RuntimeException
- Unchecked Exception이다.
- JVM 정상적인 작동 중에 발생할 수 있는 클래스이다.
🙋♂️ 에러와 예외의 차이는?
- 에러 : 개발자가 수습하기 어려운 심각한 오류
- 예외 : 개발자가 수습할 수 있는 다소 미약한 오류
- 대부분의 예외는 개발자가 실수를 하여 발생한다.
🙋♂️ Checked, UnChecked 예외의 차이는?
- Checked는 반드시 처리해야 한다. UnChecked는 하지 않아도 상관없다.
- Checked는 컴파일단계에서 예외가 발생하고,
UnChecked는 런타임단계에서 예외가 발생한다.
- Checked의 경우, 외부 이유로 발생하는 경우가 있다.
🙋♂️ RuntimeException이 필수처리 예외가 아닌 이유?
- UnChecked Exception이기 때문이다.
- 컴파일 단계에서 예외가 발생하지 않기에, 필수처리 예외가 아니다.
- 보통 개발자의 실수로 발생하기 때문에 컴파일러가 처리하지 않고,
개발자가 직접 고치게 한다..!
예외 처리 방법
예외 처리 방법에는 예외복구, 예외처리 회피, 예외전환 등이 있다.
출처