강의 수강 중 작성한 노트에서 내용을 발췌, 이응수 강사님 강의 의 노트와 이미지를 참조하고 있습니다.
스스로 이해를 위해 직접 쓴 문장들의 경우 정확성이 떨어질 수 있다는 점 참고 부탁드립니다.
프로그램 실행 시 발생할 수 있는 오류에 대비하는 것으로 프로그램의 비정상종료를 막고 실행 상태를 유지하는 것이다.
UncheckedException
과 CheckedException
으로 구분한다.RuntimeException 클래스와 그 하위 클래스들
이다.RuntimeException 클래스의 하위 클래스가 아닌 예외클래스
다.💡 예외처리를 하지 않는다면
CheckedException
은 컴파일러가 실행 전 구현 여부를 체크하고, 구현하지 않았을 시 실행 자체를 하지 않는다.
UncheckedException
은 실행 전 구현 여부를 체크하지 않고, 강제되지는 않는다.
그러나 발생한 예외에 대하여 throws나 catch를 하지 못한 예외는 JVM에 전달되어 프로그램이 비정상적으로 종료된다.
따라서 필요에 따라 개발자가 적절한 예외처리를 해주는 것이 필요하다.
(Unchecked Exception에 대하여 자바 api의 메소드들이 throws로 예외처리를 호출 측에 위임하고 있는 경우도 있다.)
💡 - 최신의 라이브러리나 프레임워크에서는
CheckedException
의 사용비중이 점점 줄어들고 있다. 대부분UncheckedException
으로 설계되고 있다. 그러한 이유는 예외 발생의 활용 예시를 보면 이해할 수 있다.
예외가 발생할 수 있는 수행문
을 try
블록 내에 작성하고, 예외 발생 시 실행될 수행문
을 catch
블록 내에 작성한다. try {
예외발생이 예상되는 수행문1;
// 예외가 발생하면 try블록의 나머지 블록은 실행하지 않고 즉시 catch 블록으로 넘어간다.
수행문2;
수행문3;
} catch (발생이예상되는예외클래스명 변수명) {
예외 발생시 실행될 수행문4;
예외 발생시 실행될 수행문5;
}
수행문6;
💡 catch 블록에서 예외를 잡지않으면 프로그램이 비정상적으로 종료된다.
catch 블록 내 수행문이 따로 없어도, catch 블록을 작성한 것만으로도 예외 처리가 된다.
try 블록에서 여러 종류의 예외발생이 예상되는 수행문을 적었을 경우에는 그 예외의 종류만큼 catch 블록을 추가한다.
호출하는 메소드
에게 예외처리의 책임이 있다.반드시 어느 한곳에서는 예외처리를 수행
해야 한다. 렇지 않으면 JVM에게 예외가 전달되어 프로그램이 종료된다.CheckedException
에서 주로 사용한다.일괄처리
할 수 있다. public void method() throws 예외클래스명, 예외클래스명, ... {
예외발생이 예상되는 수행문;
예외발생이 예상되는 수행문;
}
💡 main메소드에서 throws로 예외를 던지면 이를 JVM이 잡아서 catch 처리를 해준다.