컴퓨터/Java

Java - Unchecked Exception과 에러처리

곤정이 2021. 4. 3. 02:06
반응형

안녕하세요. Ruk입니다.

Java를 사용하며 개발을 하며 느낌 Exception에 대한 내용과 그에따른 처리를 정리해보려고 합니다.

어디까지나 제 개인적인 의견이긴 하지만요. ㅎㅎㅎ

 

Exception은 크게 2종류로 나뉘게 됩니다.

Checked Exception, Unchecked Exception 인데요. 좀 더 비교해보면

  Checked Exception Unchecked Exception
체크여부 반드시 예외처리가 필요 예외처리 없이도 문제가 되지 않음
exception 시점 컴파일 시 exception 실행단계 ( 해당 코드의 특정 값 등 )
트랜잭션 처리 roll back 처리 하지 않음 roll back 처리
대표 예외 SQLException 등 IndexOutOfBoundException
NullPointException

 

예외를 보시면 감이 오시겠지만 Unchecked exception은 발생할 수도 안할수도 있는 예외라고 보시는게 맞는 것 같내요.

하지만, 개발자라면 발생할 가능성이 1%라도 있다면 해당 코드를 안정성 있게 만들어야 된다고 생각합니다.

 

대표적으로 배열의 길이를 초과한 값을 부르면 바로 발생하죠?

이런 코드에 대하여 개발자가 판단하여 try로 감싸줄 필요가 있는 코드에 대하여 처리를 해줘야 합니다.

 

이제부터 처리방식은 제 개인적인 방식인데 다른분들이 도움이 되셨으면 좋겠내요.

 

위 코드는 과거 과제 개발 당시 짠 일부 코드인데요.

특정 도메인의 runtimeException을 처리할 InvestException을 생성하였고,

그 안에서 세부적인 상황( 상품정보를 찾을수 없다, 상품이 매진되었다, 타임아웃 등 )을 처리하였습니다.

한번 코드 내부를 보면

InvestProductNotFoundException은 InvestException를 상속한 하위 클레스 입니다.

이런 하위클래스에 CODE_50으로 생성자를 만들어 주었는데요.

장애 발생 시 해당 코드에 따른 코드값과 안내문구를 쉽게 찾아볼 수 있고 exception에 대한 반환처리도 간편해집니다.

한번 try로 감싸볼까요?

특정 코드에서 Unchecked Exception이 발생하였을 때 개발자가 의도한 InvestProductNotFoundException를 발생하였을 때와 그외 예상치 못한 runtime Exception이 발생했을 때 둘 다 처리가 가능하면서

보다 가독성 있고 관리가 편하게 개발이 가능해지네요.

각 exception마다 롤백이 필요한 경우와 필요없는 경우를 나누기도 좋구요.

 

예시 : @Transactional(noRollbackFor = { InvestProductNotFoundException.class}))

 

 

종종 실무 업무를 하다보면 모든 장애catch (Exception e){ }으로 처리하는 분들이 있었는데

이런 케이스는 try문이 길어질수록 어떤 문제로 장애가 생겼는지 명확하게 반환하기 힘들 뿐 아니라

가독성도 떨어지고 별로 좋은 코드라고 생각되진 않내요.

또한 Junit등 테스트코드도 요즘 많이 짜는 추세여서 개발자가 각 코드에 대한 발생 가능한 장애범위를 계산하고 코드를 짜는 것과, 모든 장애를 한번에 exception으로 묶는것의 차이는 크다고 생각됩니다.

 

지금까지 Ruk의 장애처리에 대한 의견이였는데 많은 의견이나 수정, 보완할 정보를 남겨주시면 참고하겠습니다.

감사합니다.

반응형