프로그램이 실행 중 어떤 원인에 의해 오작동, 비정상적으로 종료되는 경우를 초래하는 원인
발생 시점에 따라,
자바에서는 실행시 발생할 수 있는 프로그램 오류를 에러(Error)
, 와 예외(Exception)
로 구분
오류 클래스의 계층구조
예외 클래스의 계층구조
- 모든 예외 최고 조상은 Exception클래스
- 크게 Exception클래스와 그 자손들, RuntimeException과 그 자손들 두 분류로 나뉨
- RuntimeException클래스도 Exception클래스의 자손이지만 특성이 달라 분류
Exception클래스와 자손클래스
: 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외RuntimeException클래스와 자손클래스
: 프로그래머의 실수로 발생하는 예외
예외처리(Exception Handling)란?
- 정의 : 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것
- 목적 : 프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하는 것
발생한 예외를 처리하지 못하면 프로그램은 비정상적으로 종료, 처리되지 못한 예외는
JVM의 예외처리기(UncaughtExceptionHandler) 가 받아서 예외의 원인을 화면에 출력한다.
try-catch문의 구조
- 하나의 try블럭 다음에는 하나 이상의 catch 블럭이 올 수 있음
- if문과는 달리, try블럭 catch블럭 내에 { } 생략 불가
+) try블럭에서 예외 발생 시 그 다음 문장은 실행되지 않고 catch블럭으로 이동한다.
catch 블럭은 괄호() 와 블럭{} 두 부분으로 구분되는데,
괄호() 내에는 처리하고자 하는 예외와 같은 참조변수 하나를 선언해야 한다.
예외가 발생하면, 발생한 예외에 해당하는 클래스의 인스턴스가 만들어진다.
첫번째 catch 블럭부터 차례로 내려가면서 catch블럭의 괄호()내에 선언된 참조변수와 생성된 예외클래스의 인스턴스에 instanceof연산자를 이용해 검사결과가 true인 catch블럭을 만날때 까지 검사한다.
마지막 catch블럭 괄호()에 Exception클래스 타입의 참조변수를 선언해 놓으면 어떤 종류의 예외가가 발생해도 처리된다.