Exception이란 예외란 프로그램에서 발생되는 에러를 의미를 한다.
예외 처리를 한다고 말을하면 그 예외를 흘리는 방법 혹은 유저에게 처리를 해서 예외에 대한 문구를 주는 방법이 있다.
예외를 사용하는 방법 중 하나인 try~catch 문이 있다.
try~catch 문의 경우 아래의 코드 처럼 사용을 한다.
try {
// 로직
}catch (Exception e){
e.printStackTrace();
}finally {
// 무조건 처리하는 로직
}
위의 try 구문 안에는 비지니스 로직 혹은 로직을 작성을 한다.
여기서 try
안에서 우리는 catch
잡을 exception을 넣어준다. 위의 코드에는 예로 Exception을 넣었다.
그렇다면 만약에 NullPointException을 처리를 하기 위해서는 NullPointException을 선언을 해준다면 NullPoint Error 가 발생이 된다면 catch
문에 도달하게 된다.
catch
문에서는 여러가지 처리 로직을 구현이 가능하다.
예로 만약에 db 에서 에러 발생시에 대한 데이터를 저장이 필요가 가능하다면 catch
문에 저장 로직을 넣어 주면 된다.
그리고 finally
구문에서는 정상적으로 작동이 되던 아니면 에러가 발생이 되던 로직이 실행이 된다.
그렇기 때문에 finally구문을 작성을 안하는 방법도 있다.
try~catch 문으로 해당 메소드에서 바로 예외를 처리하는 방법이 있다.
하지만 예외를 상위 메소드로 던지는 방법이 있다.
public SseEmitter handle() throws Exception{
return sseService.baseEvent();
}
메소드 뒤에서 throws 구문과 던질 예외를 선언을 해준다면 사용되는 메소드 위의 계층에서 예외를 잡을 수 있다.
그렇기 때문에 하나의 예외를 처리를 하는 것이 아니라 다른 메소드에서 예외를 잡는 로직을 한곳에서 처리 하게 로직을 설계를 가져 갈 수 있다. (개발자가 로직에 대한 설계가 필요할 것이다)
Exceptoin의 경우 check 하는 exception 과 uncheck를 하는 exception 으로 구분이 가능하다.
RuntimException을 상속하는 Exception의 경우 Unchecked Exception으로 분류가 가능하고 RuntimeException을 상속 하지 않는 다면 Checked Exception 이라고 한다.
항목 | checked exception | unchecked exception |
---|---|---|
예외 처리 시점 | 컴파일 시점에서 예외 처리 | 런타임 중에 예외처리 |
처리유무 | 반드시 예외를 처리 해야 한다 | 명시적으로는 예외를 처리안해도 되지만 예외 처리할때는 해야한다 |
트랜잭션 처리 | 롤백 대상에서 제외 된다 | 롤백이 된다 |