📌예외?
프로그램의 정상 실행이 중단될 수 있는 모든 조건과 상황에 대한 통칭
==> java.lang.Throwable타입으로 캡슐화함.
📌예외 계층(Throwable 하위 타입)
📕java.lang.Error : 시스템 실패 상황으로 일반적으로 개발자가 처리할 수 없는 에러.
📕java.lang.Exception : 예외 처리 정책에 따라 조건문의 형태로 처리가 가능한 예외.
📕checked exception(non RuntiomeException) : 회피/복구/전환 중 어느 한가지 예외 처리 정책을 기반으로 반드시 처리를 해야하는 예외.
📕unChecked exception(RuntimeException 하위 타입) : 개발자가 직접 처리하지 않더라도 자동으로 예외(throws) 회피 전략이 사용되는 예외
📌예외 처리 정책
✔예외 회피(소극적 처리) : 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{
예외 발생 여부와 상관없이 실행되는 구문.
**다음은 예외를 강제로 발생시키고 그것을 회피하거나 전환해보는 코드의 예이다.
method1에서 예외를 강제로 발생시키고 main에서 throw e1을 통해 예외를 회피하거나
InterruptedException(checked exception)을 RuntimeException(unChecked exception)으로 전환시킨다.
public class ExceptionDesc {
public static void main(String[] args) throws InterruptedException{
try {
String data =method1();
System.out.println(data);
}catch(NullPointerException e) {
// System.err.println(e.getMessage());
e.printStackTrace();
try {
Thread.sleep(3000);
System.out.println("정상 처리 가장.");
} catch (InterruptedException e1) {
// throw e1; //예외 회피
throw new RuntimeException(e1); //예외 전환
}
}
}
//모든 메소드에는 throws RuntimeException 이 생략되어있다.
private static String method1() {
if(1==1) {
// throw new NullPointerException("강제 발생 예외");
try {
throw new SQLException("강제 발생 예외");
}catch(SQLException e) {
throw new DataAccessException(e);
}
}
return "DATA";
}
}
'웹기반 애플리케이션' 카테고리의 다른 글
JSP📃_Buffer (0) | 2023.03.16 |
---|---|
JSP📃_Session (0) | 2023.03.15 |
JSP📃_웹 어플리케이션에서 흐름 제어(A->B) 방법 (0) | 2023.03.09 |
JSP📃_HttpServletResponse (0) | 2023.03.08 |
웹기반 애플리케이션JSP 9일차 📃_직렬화·역직렬화·마샬링·언마샬링 (0) | 2023.03.06 |