예외를 공부해봅니다
트랜잭션을 공부하는 중, 예외와 관련하여 공부해야 할 필요성을 느낍니다.
이클립스를 개발하다보면, 왜 빨간줄 나오는 것, 어떤거는 왜 빨간줄이 나오지 않을까
깊이 고민해 본 적이 없었던 것 같습니다..
예외 클래스의 구조는 다음과 같습니다.
모든 예외 클래스는 Throwble 클래스를 상속받고 있습니다.
예외를 크게 3 가지로 구분할 수 있는데 Error, Checked Exception, Unchecked Exception으로 구분할 수 있습니다.
Error는 시스템 레벨의 심각한 수준에 에러입니다. 어플리케이션 수준에서 처리가 가능하지 않은 에러를 말합니다.
사실 너무 개념적인 말이라 무슨 말인지 이해가 잘 안갑니다...
예를 들어, OutOfMemory, StackOverFlow 같은 에러를 말한다고 하면 쉽게 이해할 수 있습니다.
그리고 Excepion 클래스를 상속받는 Checked, Unchecked Exception이 있습니다.
Checked Exception은 컴파일 시 발생하는 에러인데,
예를 들어, IOException, FileNotFoundExcpeion등이 있습니다.
개발중 IDE가 코드에 빨간줄을 띄어주는 에러라고 생각하시면 됩니다.
따라서 해당 에러에 대해서, 개발자는 강제적?으로 처리 해줘야 합니다.
Checked Excpetion은 또한 예외 발생시 트랜잭션에서 롤백 처리를 해주지 않습니다.
왜 처리를 안해줄까라는 의문에, 우아한형제들 기술 블로그에서 명쾌한 답이 있네요.
출처 : http://woowabros.github.io/experience/2019/01/29/exception-in-transaction.html**
예상되서 이미 개발과정에서 처리된 에러에 대해서, 롤백해 줄 필요는 없겠지요.
하지만 Default 일뿐, 스프링에서도 설정을 통하면 Checked Exception 도 트랜잭션 롤백처리가 가능합니다.
다음은 **Unchecked Exception **입니다.
해당 에러는 예상치 못한, 컴파일 단계에서 확인 할 수 없는 에러를 말합니다.
예를 들어, ArraryOutOfIndex, NumberFormat Exception 등이 있습니다.
컴파일 단계에서 확인이 안되기에, 즉 IDE에서 빨간줄이 뜨지 않는 에러를 말합니다.
그럼 예외처리를 어떻게 해야 할까요?
예외 복구, 예외 회피, 예외 전환 3가지 방법으로 에러를 처리 할 수 있습니다
예외 복구는 예외가 발생하면, 다시 재시도 함으로써 정상적인 로직을 도모합니다.
또는 다른 흐름으로 유도하여, 예외가 발생하더라도 정상적인 진행 가능합니다.
예외 회피는 호출자에게 예외 발생에 대한 처리를 넘기는 것을 말합니다.
흔히 다음과 같은 코드입니다.
public void A throws IOExepction{
//
}
예외 전환은 좀더 예외를 다듬어서 호출자에게 던져주는 것을 말합니다.
호출자가 좀 더 에러를 명확하게 받아, 분명하게 처리 해주기 위함입니다.
다음과 같은 코드를 말합니다.
catch(SQLExeption e){
throw new NonUserIdException();
}
정리하다보니, 예외처리에 대한 개념이 없더라도.
세가지 방법을 적절하게 사용해서 예외를 처리하며 코딩해왔네요..?
참고