[Spring] error vs excetion/ throw , throws / throws Exception 을 사용하는 이유

hyewon jeong·2024년 5월 31일
0

Spring

목록 보기
61/65

🎈 1. 오류(Error) 와 예외(Exception)

  •  프로그래밍에서는 실행 시(runtime) 발생할 수 있는 오류  2가지 

  • 오류(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
    예) 메모리 부족( OutOffMemoryError) , StackOverFlowError 등
  • 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
    예)  개발자가 구현한 로직에서 발생한 실수, 사용자의 영향 등

🎈 2.Checkd vs Unchecked

  • CheckedException 이 일어날 가능성이 있는 것은 반드시 try-catch문으로 감써거나 또는 throws로 던져서 예외처리를 해야한다. 그래야 컴파일이 일어나 프로젝트가 실행됩니다.

🎈 3. Throw vs Throws

  • 기본적으로 예외가 발생했을 경우 반드시 예외처리를 해줘야 합니다.

📍 3-1. Throw (예외발생)

  • throw 는 예외를 발생시키는 키워드
  • try-catch문의 catch문에서 예외처리를 반드시 해줘야합니다.

📍 3-2. Throws (예외던지기)

  • throws 는 예외를 try-catch문으로 예외를 직접 처리 하지 않고 , 호출한 곳으로 예외를 던지는 역할을 합니다.

🎈 3. throws Exception 을 쓰는 이유?

위에서 설명했듯이 예외발생시 기본적으로 try-catch문으로 예외처리를 해야하지만 springFramework의 경우
@ExceptionHandler 어노테이션을 사용하면 예외를 전역적으로 처리 할 수 있고 ,
컨트롤러 내의 다른 메서드에서 발생하는 CustomException을 @ExceptionHandler을 이용한 메서드가 예외처리를 함으로 try-catch문을 사용할 필요가 없어진다.

CustomException.class

public class CustomExceptionextends Exception {

    public CustomException() {
    }

    public CustomException(String message) {
        super(message);
    }

    public CustomException(Exception e) {
        super(e);
    }

}

ControllerExceptionHandler.class


@ControllerAdvice
public class ControllerExceptionHandler {

    private static final Logger logger = LoggerFactory.getLogger(ControllerExceptionHandler.class);

    @SuppressWarnings("unchecked")
	@ExceptionHandler({RimsException.class})
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    protected ResponseEntity handleApiException(CustomException customException) {
        return new ResponseEntity(new ErrorDTO(
        		customException.getExceptionStatus().getStatusCode(),
        		customException.getExceptionStatus().getMessage()),
                HttpStatus.valueOf(customException.getExceptionStatus().getStatusCode()));
    }

    @ExceptionHandler({RuntimeException.class})
    protected ResponseEntity<String> handleEtcException(CustomException e) {
        return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
    }
}
profile
개발자꿈나무

0개의 댓글