
일반적으로 프로그램의 실행 환경에서 발생하는 심각한 문제로 개발자가 직접 제어하거나 복구할 수 없는 경우. 예를 들어, JVM 메모리가 부족하거나 시스템에 문제가 생겼을 때 발생한다.
java.lang.Error의 클래스를 상속하며 Throwable의 하위클래스.
주요 에러예시
- OutOfMemoryError: JVM의 힙 메모리가 부족할 때 발생
- StackOverflowError: 스택 메모리가 다 소모되었을 때 발생
- NoClassDefFoundError: 필요한 클래스 파일을 찾을 수 없을 때 발생
프로그램의 논리적인 흐름에서 발생할 수 있는 문제로 개발자가 처리하여 프로그램이 비정상 종료되지 않도록 할 수 있는 문제들. 예를 들어, 파일을 찾을 수 없거나 네트워크 연결에 실패할 때 발생. java.lang.Exception 클래스를 상속하며, Throwable 클래스의 하위 클래스.
컴파일 시점에서 예외 처리 코드가 있는지 확인되는 예외로 반드시 try-catch 블록으로 처리하거나 throws 키워드를 사용해 메서드 시그니처에 명시해야하는 익셉션.
Checked Exception 예시
- IOException: 입출력 작업 중 오류가 발생할 때.
- SQLException: 데이터베이스 작업 중 오류가 발생할 때.
- ClassNotFoundException: 클래스 파일을 찾을 수 없을 때.
런타임 시점에서 발생하는 예외로, 컴파일 시점에 예외 처리 여부를 확인하지 않음. 개발자가 선택적으로 처리할 수 있으며, 예외가 발생하면 프로그램이 비정상 종료될 수 있다.
Unchecked Exception 예시
RuntimeException를 상속하는 예외들
- NullPointerException: null 객체를 참조할 때.
- ArrayIndexOutOfBoundsException: 배열의 잘못된 인덱스를 접근할 때.
- ArithmeticException: 잘못된 산술 연산을 수행할 때 (예: 0으로 나누기).