프로그램 실행 중 발생하는 문제는 발생 시점과 성격에 따라 세 가지로 분류한다.
종류,발생 시점,내용
Syntax Error:컴파일 시,소스 코드가 Java 문법에 어긋날 때 발생 (컴파일 불가)
Runtime Error:실행 중,프로그램 실행 과정에서 발생하는 비정상적 상황 (Exception/Error)
Logic Error:실행 중,"실행은 정상적으로 되나, 개발자의 의도와 다른 결과가 출력됨"
Java는 모든 에러와 예외를 클래스로 관리하며, 최상위 클래스는 java.lang.Throwable이다.
Error (에러): JVM 레벨의 심각한 문제로 프로그램 코드로 수습할 수 없는 상황 (예: OutOfMemoryError)
Exception (예외): 프로그램 코드에서 대응 가능한 문제
Checked Exception: 컴파일러가 예외 처리를 강제함. 처리하지 않으면 컴파일되지 않음 (예: IOException, SQLException)
Unchecked Exception (RuntimeException): 실행 시점에 발생하며, 예외 처리를 강제하지 않음 (예: NullPointerException, ArithmeticException)
try {
// 1. 예외 발생 가능성이 있는 로직
} catch (ExceptionType e) {
// 2. 예외 발생 시 수습 로직 (e.getMessage(), e.printStackTrace() 등으로 원인 파악)
} finally {
// 3. 예외 발생 여부와 관계없이 항상 실행 (주로 리소스 해제/자원 반납)
}코드를 입력하세요
throw: 메서드 내부에서 의도적으로 예외 객체를 발생시킬 때 사용한다.
ex) throw new IllegalArgumentException("메시지");
throws: 메서드 선언부에 사용하며, 해당 메서드를 호출한 쪽으로 예외 처리를 위임(전파)한다.
ex) public void method() throws IOException { ... }
메서드 내부에서 발생한 예외가 해당 지점에서 try-catch로 처리되지 않으면, 해당 메서드를 호출한 상위 메서드로 예외 객체가 전달된다. 최종적으로 main() 메서드에서도 처리되지 않을 경우 JVM이 예외를 받아 프로그램을 강제 종료하고 스택 트레이스(Stack Trace)를 출력한다.
e.getMessage(): 발생한 예외에 대한 간략한 설명 메시지를 반환한다.
e.printStackTrace(): 예외가 발생한 근본적인 원인과 호출 스택의 경로를 상세히 출력한다. (디버깅 시 활용)