[Spring] 커스텀 Exception 만들기 (w. Lombok)

Kai·2023년 1월 25일
0

스프링

목록 보기
7/18

☕ 시작


Java, Spring에서는 많은 Exception객체를 기본으로 제공한다.
하지만, 이런 객체들을 실무에서 그대로 쓰기에는 뭔가 아쉽다.
그래서 결국 애플리케이션에 딱 맞는 Exception을 만들 필요가 생기게 된다.

그래~서 이번 글에서는 커스텀한 Exception을 만드는 방법을 알아보도록 하겠다 🔥
그리고 Lombok에서 제공하는 @StandardException 어노테이션으로 간편하게 커스텀 예외를 만드는 방법도 알아보겠다.


🌠 예외 만들기 규칙


Exception을 만들기 위해서는 2가지 규칙만 따라주면 된다.


1) Java 예외를 상속받자

Java의 예외의 종류와 구조가 궁금하다면, 이 글을 참고하자.

내가 새롭게 만들 예외가 Checked 예외인지 Unchecked 예외인지 판단한 후에 Checked예외라면, Exception을 상속받고 Unchecked예외라면 RuntimeException을 상속받아서 구현하자.


2) 생성자를 만들자

상황에 따라서 다르겠지만 기본적으로 아래의 4종류의 생성자를 구현해주면 모든 상황에서 사용이 가능하다.
(반드시 4가지 모두 구현해야하는 것은 아니고, 필요한 것만 구현해도 괜찮다.)

  • 기본 생성자 (No arguments)
  • Message-only 생성자
  • Cause-only 생성자
  • 완전체(?) 생성자

⚡ 커스텀 예외


위에서 이야기한대로 나만의 예외를 만든다면, 이렇게 될 것이다.

public class ExampleException extends RuntimeException {

    public ExampleException() {
        super();
    }

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

    public ExampleException(Throwable cause) {
        super(cause);
    }

    public ExampleException(String message, Throwable cause) {
        super(message, cause);
    }
    
}

사실상 RuntimeException과 같은 기존의 예외에 껍데기만 씌운거라고 보면 될 것이다.
실무에서는 이런 예외들을 훨씬 많이 만들게 될 것인데, 그럴 때마다 위와 같은 동일한 코드와 작업을 해주는 것은... 귀찮다 🤭

그래~서 Lombok에서는 아주 편리한 어노테이션을 제공한다.
(Lombok이 궁금하다면 이 글을 참고하자.)

@StandardException

Lombok에서 제공하는 @StandardException을 쓰면, 기본적인 예외처리용 생성자 4가지를 모두 만들어준다. 즉, 위의 코드를 아래와 같이 아주 심플하게 사용할 수 있게 된다.

@StandardException
public class ExampleException extends Exception {}

++ protected 생성자


Java의 예외를 상속받아서 생성자를 만들려고 보면, 이렇게 protected생성자가 하나 보인다.

3번째 인자는 Suppressed exception으로 사용할지의 여부를 의미하고, 4번째 인자는 Stack trace를 출력할지를 선택하는 값이다. (공식문서)

💡 Suppresed exception?
무시가능한 예외를 의미한다. try-catch-finally구문에서 try부분에서 suppressed예외가 발생했고, finally에서 또 다른 예외가 발생했다면 try에서 발생한 예외는 무시된다.


참고

0개의 댓글