[Java] 특정 리소스가 없을 때 예외처리를 어떻게 할까?

da__ell·2023년 6월 1일
0

JAVA

목록 보기
7/7

회원, 계좌 등 특정 리소스를 찾으려는데 해당 리소스가 없다면?

회원가입을 진행할때 해당 회원이 이미 가입되어있는 상태이거나, 계좌를 조회하려는데 계좌가 없는 상태일 경우 그것에 대한 예외 처리를 진행해야한다.

오류는 시스템 레벨에서 발생하지만 예외는 내가 구현한 로직에서 발생하는 것이기 때문에, 발생할 상황을 예상하고 그것에 대한 처리를 분명히 진행해야한다.

예외 클래스에 대한 구분

모든 예외와 오류는 Throwable 클래스에서 파생된다.
Throwable 클래스에는 두 개의 주요 하위 클래스 Exception과 Error가 발생한다.
Exception 클래스는 프로그램에서 처리할 수 있는 조건을 나타내고, Error 클래스는 시스템 오류와 같은 복구 불가능한 심각한 문제를 나타낸다.
Exception 클래스는 Checked Exception과 Unchecked Exception으로 나뉜다.

Checked Exception 체크 예외

이 예외는 컴파일 시점에 확인되며, 프로그래머가 예외를 처리하도록 강제한다. 예를 들면 백준 알고리즘을 풀 때 발생하는 파일 입출력 작업에서 발생하는 IOException이 체크예외에 해당된다.

try-catch 블록으로 처리하거나, 메소드가 예외를 던질 수(throw)할 수 있다는 것을 선언함으로써 처리할 수 있다.

UnCheckedException (Runtime Exception)

이 예외는 실행 시점(Runtime)에 발생하며, 프로그래머가 예외를 처리하지 않아도 컴파일러가 예외를 처리하는 것을 방지하지 않는다. 따라서 명시적인 예외처리를 하지 않아도 된다.

또한 예외발생 시 Checked Exception과 다르게 Unchecked Exception은 트랜잭션을 롤백한다는 차이를 가진다.

RuntimeException을 상속한 예외 클래스를 만든다.

회원 가입이 불가하거나, 계좌 조회가 불가능하다는 것은 예상되는 예외 사항이기 때문에 명시적인 예외처리를 진행하기 보다 유연하게 적절한 응답을 제공하는 방식으로 구현하는 것이 적절하다.

회원가입이 불가하다, 계좌조회가 불가능하다는 메시지를 반환하고, 동작하려는 트랜잭션을 롤백시키기만 하면 되기 때문이다.

따라서 RuntimeException을 상속한 UserAlreadyExistExceptionRescourceNotFoundException 을 구현하였다. 특별히 별도의 로직을 구현한 것은 아니지만, 특정 상황에서만 발생하는 예외를 만들고 그 예외에 따라 적절한 응답을 제공하는 방식은 코드의 유연성과 가독성 측면에서 이점이 있을 것이라고 생각한다.

참고자료

Java 예외(Exception) 처리에 대한 작은 생각

profile
daelkdev@gmail.com

0개의 댓글