트랜잭션을 공부하는 중, 예외와 관련하여 공부해야 할 필요성을 느낍니다.

이클립스를 개발하다보면, 왜 빨간줄 나오는 것, 어떤거는 왜 빨간줄이 나오지 않을까

깊이 고민해 본 적이 없었던 것 같습니다..

<br/>

<br/>

예외 클래스의 구조는 다음과 같습니다.

<img alt="pasteImage.png" pathname="U9WBLB190223195003.PNG" src="https://file.podo-dev.com/blogs/images/2019/07/10/origin/U9WBLB190223195003.PNG" style="width:360px" title="pasteImage.png" />

<br/>

모든 예외 클래스는 Throwble 클래스를 상속받고 있습니다.

예외를 크게 3 가지로 구분할 수 있는데 Error, Checked Exception, Unchecked Exception으로 구분할 수 있습니다.

<br/>

Error는 시스템 레벨의 심각한 수준에 에러입니다. 어플리케이션 수준에서 처리가 가능하지 않은 에러를 말합니다.

사실 너무 개념적인 말이라 무슨 말인지 이해가 잘 안갑니다...

예를 들어, OutOfMemory, StackOverFlow 같은 에러를 말한다고 하면 쉽게 이해할 수 있습니다.

<br/>

그리고 Excepion 클래스를 상속받는 Checked, Unchecked Exception이 있습니다.

<br/>

Checked Exception은 컴파일 시 발생하는 에러인데,

예를 들어, IOException, FileNotFoundExcpeion등이 있습니다.

개발중 IDE가 코드에 빨간줄을 띄어주는 에러라고 생각하시면 됩니다.

따라서 해당 에러에 대해서, 개발자는 강제적?으로 처리 해줘야 합니다.

<br/>

Checked Excpetion은 또한 예외 발생시 트랜잭션에서 롤백 처리를 해주지 않습니다.

왜 처리를 안해줄까라는 의문에, 우아한형제들 기술 블로그에서 명쾌한 답이 있네요.

<div class="quotation">"Checked Exception은 예상된 에러고, Unchecked Exception은 예상하지 못한 에러이기 때문입니다. 물론 Default가 그런것이구요"<br />
출처 : <a href="http://woowabros.github.io/experience/2019/01/29/exception-in-transaction.html">http://woowabros.github.io/experience/2019/01/29/exception-in-transaction.html</a>**

예상되서 이미 개발과정에서 처리된 에러에 대해서, 롤백해 줄 필요는 없겠지요.

하지만 Default 일뿐, 스프링에서도 설정을 통하면 Checked Exception 도 트랜잭션 롤백처리가 가능합니다.

<br/>

다음은 **Unchecked Exception **입니다.

해당 에러는 예상치 못한, 컴파일 단계에서 확인 할 수 없는 에러를 말합니다.

예를 들어, ArraryOutOfIndex, NumberFormat Exception 등이 있습니다.

컴파일 단계에서 확인이 안되기에, 즉 IDE에서 빨간줄이 뜨지 않는 에러를 말합니다.

<br/>

<hr />
<br/>

그럼 예외처리를 어떻게 해야 할까요?

<br/>

예외 복구, 예외 회피, 예외 전환 3가지 방법으로 에러를 처리 할 수 있습니다

<br/>

예외 복구는 예외가 발생하면, 다시 재시도 함으로써 정상적인 로직을 도모합니다.

또는 다른 흐름으로 유도하여, 예외가 발생하더라도 정상적인 진행 가능합니다.

<br/>

예외 회피는 호출자에게 예외 발생에 대한 처리를 넘기는 것을 말합니다.

흔히 다음과 같은 코드입니다.

public void A throws IOExepction{
    //
}

<br/>

<br/>

예외 전환은 좀더 예외를 다듬어서 호출자에게 던져주는 것을 말합니다.

호출자가 좀 더 에러를 명확하게 받아, 분명하게 처리 해주기 위함입니다.

다음과 같은 코드를 말합니다.

catch(SQLExeption e){
   throw new NonUserIdException();
}

<br/>

<br/>

정리하다보니, 예외처리에 대한 개념이 없더라도.

세가지 방법을 적절하게 사용해서 예외를 처리하며 코딩해왔네요..😃

<br/>

<br/>

<br/>

참고

<a href="http://www.nextree.co.kr/p3239/">http://www.nextree.co.kr/p3239/</a>

<a href="https://brunch.co.kr/@kd4/5">https://brunch.co.kr/@kd4/5</a>

0
이전 댓글 보기
등록
TOP