📌 예외? 프로그램의 정상 실행이 중단될 수 있는 모든 조건과 상황에 대한 통칭
==> java.lang.Throwable 타입으로 캡슐화함.

예외 계층(Throwable 하위 타입)
-> java.lang.Error : 시스템 실패 상황으로 일반적으로 개발자가 처리할 수 없는 에러
-> java.lang.Exception : 예외 처리 정책에 따라 조건문의 형태로 처리가 가능한 예외
-> checked exception(non RuntimeException) : 회피/복구/전환 중 어느 한가지 예외 처리 정책을 기반으로 반드시
처리를 해야 하는 예외(try-catch)
RuntimeException을 제외한 Exception의 하위 클래스
-> unChecked exception(RuntimeException 하위 타입) : 개발자가 직접 처리하지 않더라도 자동으로
예외 회피(throws) 전략이 사용되는 예외
RuntimeException의 하위 클래스
** check uncheck 의 차이점 알아두기
예외 처리 정책
예외 회피(소극적 처리) : throws 키워드를 이용해 메소드의 콜스택 데이터를 기반으로 호출자에게 예외 처리를 떠넘기는 전략.
예외 처리(적극적 처리) : try(){}catch(){}finally{} 구문으로 직접 처리하는 전략
try(Closable 객체 생성 및 선언){
예외 발생 가능 구문
}catch(처리 가능한 예외 선언, Throwable 하위 타입){
-> 예외 복구
-> 예외 로그 기록 -> 일정시간 지연 -> 예외 발생 작업에 대한 재실행
-> 예외 전환 : 명확한 조건이나 상황을 표현할 수 있는 예외의 형태로 변경(wrapping)
catch(IOException e){
throw new FileCopyFailureException(e);
}
** Custom Exception
1. 예외의 특성에 따라 상위 타입을 결정(Exception vs RuntimeException)
2. throw 예외 객체 생성
}finally{
예외 발생 여부와 상관없이 실행되는 구문
}
Throwable class
Throwable 클래스는 Java 언어의 모든 오류 및 예외의 슈퍼 클래스이다.
이 클래스의 인스턴스(또는 그 서브 클래스 중 하나)인 객체만 Java Virtual Machine에 의해 발생되거나
Java throw 문에 의해 발생될 수 있다.
예외의 compile-time checking을 위해, RuntimeException 또는 Error의 서브 클래스가 아닌
Throwable 및 Throwable의 서브 클래스는 Checked 예외로 간주된다.
Error class
Error는 Throwable의 하위 클래스로서, 응용 프로그램의 심각한 문제를 나타내는 클래스이다.
시스템에 비정상적인 상황이 생겼을 때 발생한다. (시스템 레벨에서 발생한다.)
이러한 오류는 대부분 비정상적인 상태이다. "정상"조건이지만 ThreadDeath 오류는 대부분의 응용 프로그램이
이를 잡아 내려고 하지 않기 때문에 Error의 하위 클래스이기도 하다.Error의 서브 클래스를 throws 선언할
필요는 없다.
Error 및 해당 서브 클래스는 예외 컴파일 시간 검사를 위해 unchecked Exception으로 간주된다.
Exception class
Exception 클래스와 그 subclass는 응용 프로그램이 catch 할 수 있는 조건을 나타내는 Throwable 형식이다.
Exception 클래스와 RuntimeException의 subclass가 아닌 서브 클래스는 checked exception이다.
직접 구현하여 개발자가 비즈니스 로직에 맞게 생성 가능하다.
수많은 subclass가 있으므로 꼭 reference를 확인해 보자.
RuntimeException
RuntimeException은 Java Virtual Machine의 정상적인 작동 중에 발생할 수 있는 예외의 슈퍼 클래스이다.RuntimeException 및 해당 서브 클래스는 unchecked exception이다. unchecked exception은 메서드 또는 생성자의 실행에 의해 발생한다.
메서드 또는 생성자 경계 외부로 전파될 수 있는 경우 메서드 또는 생성자의 throws 절에서 선언될 필요가 없다.
'웹기반 애플리케이션' 카테고리의 다른 글
JSP의 기본객체(2)(ServletContext) (0) | 2023.03.16 |
---|---|
JSP의 기본객체, cookie와 session (0) | 2023.03.15 |
Http Response Packaging(2) (0) | 2023.03.10 |
JSP, Servlet컨테이너의 역할 (0) | 2023.03.09 |
클라이언트의 전송 컨텐츠 확보/ Http(Stateless, Connectless) response packaging(1) (0) | 2023.03.09 |