Exception 종류를 알아보자

Panda·2022년 5월 22일
0

Java

목록 보기
1/7

Exception를 자세히 살펴보기 전에 Exception, Error 의 개념을 살펴보도록 하겠습니다.

Exception 개념

프로그래밍에서 예외란 입력 값에 대한 처리가 불가능하거나, 프로그램 실행 중에 참조된 값이 잘못된 경우 등 정상적인 프로그램의 흐름을 어긋나는 것.
그리고 자바에서 예외는 개발자가 직접 처리할 수 있기 때문에 예외 상황을 미리 예측하여 핸들링할 수 있습니다.

Error 개념

Exception 과 Error는 엄연히 다른 개념인데
에러는 시스템에 무엇인가 비정상적인 상황이 발생한 경우에 사용됩니다. 주로 JVM에서 발생시키는 것이며 예외와 반대로 이를 애플리케이션 코드에서 잡으려고 하면 안 된다고 하네요.
에러의 예로는 OutOfMemoryError, ThreadDeath, StackOverflowError 등이 있습니다.

Exception 발생 이랑 달리 에러가 발생하게 되면 매우 심각할 것입니다.

Exception 종류

Exception에는 Unchecked Exception 과 Checked Exception 2가지가 존재 합니다.

  • Unchecked Exception
    • 명시적인 예외 처리 강제가 아닙니다.
    • 런타임 시점에 예외가 발생합니다.
    • RuntimeException 상속
  • Checked Exception
    • 컴파일 시점에 예외가 발생
    • 명시적인 예외 처리를 강제 하게 됩니다. (try ~ catch 강제)
    • RuntimeException 상속 안함

Exception을 실제로 사용을 해보자

스프링에서 API 프로젝트를 하게 되면 저희가 처리해야 될 예외상황이 존재하는데 그때 RuntimeException을 상속 받은 CustomException을 구현하고 RestControllerAdvice로 처리를 하는 방식이 있습니다.

// CustomApiException.class
@Getter
@RequiredArgsConstructor
// RuntimeException을 상속받았음으로 Uncechked Exception 입니다.
public class CustomApiException extends RuntimeException{
    private final ResponseMessage errorMessage;
    // ResponseMessage 원하는 대로 만들어보세영
}
// UserService.class
if (user == null) {
	// 저희가 원하는 시점에 Exception 발생시킴.
	throw new CustomApiException(ResponseMessage.NOT_FOUND_USER);
 }
// GlobalExceptionHandler.class
@RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
	// CustomApiException 이 발생하면 여기서 처리하게 됩니다.
    @ExceptionHandler(CustomApiException.class)
    public ResponseEntity<?> handleApiException(CustomApiException e) {
        return makeErrorResponse(e.getErrorMessage());
    }
	
    // 우리의 Response 형태로 변환 하는 함수
    private ResponseEntity<Object> makeErrorResponse(ResponseMessage errorMessage) {
        CustomResponse errorResponse = new CustomResponse(errorMessage);
        return ResponseEntity.status(errorMessage.getStatusCode()).body(errorResponse);
    }
}

ControllerAdvice 를 구현하여
원하는 Exception 들에 대해 원하는 처리를 할 수 있습니다.

느낀 점

RestControllerAdvice를 만들었을 때
Checked Exception, Unchecked Exception에 대해서 알게되어서
지금 와서 공부를 했습니다.

Exception 의 구조를 알게 되니까 왜 RuntimeException을 상속을 받아야되는지
CustomeException을 어떻게 처리를 할 수 있는지 에 대해서 이해가 됐습니다.

profile
실력있는 개발자가 되보자!

0개의 댓글