Java/SpringBoot

Throwable cause, Throwable

dev.jelee 2024. 11. 7. 23:03

Parameter로 Throwable cause를 받는 코드를 보았다. 이게 무엇인가?

정리해보자.


Throwable cause는 자바에서 예외를 처리할 때 자주 등장하는 개념입니다. 이를 이해하려면 Throwable이 무엇인지부터 짚고 넘어가보자.

 

1. Throwable이란?

Throwable은 자바에서 모든 오류와 예외를 나타내는 최상위 클래스입니다. 자바에서 발생할 수 있는 예외(Exception)와 에러(Error)는 모두 Throwable 클래스를 상속합니다.

  • Exception: 프로그램에서 처리할 수 있는 예외를 나타냅니다.
  • Error: 프로그램에서 처리할 수 없는 오류를 나타냅니다 (예: OutOfMemoryError).

따라서, Throwable 클래스는 예외와 오류의 공통 부모 클래스입니다.


2. Throwable cause의 의미

Throwable cause는 예외가 발생한 원인을 나타내는 필드입니다. 이 필드는 체인 형식으로 예외를 추적할 수 있게 도와줍니다. 즉, 어떤 예외가 발생했을 때 그 예외가 다른 예외로부터 발생했으면, 그 원인 예외를 cause에 저장하여, 발생한 예외가 어디에서 시작되었는지 추적할 수 있습니다.

 

자바에서는 예외를 체인 형태로 연결할 수 있도록 지원합니다. 예를 들어, 특정 예외가 다른 예외로부터 유발될 수 있기 때문에, 이를 명시적으로 추적할 수 있는 방법이 필요합니다. cause는 바로 그 역할을 합니다.


3. 왜 Throwable cause를 사용하는지

Throwable cause는 예외 체인을 만들기 위해 사용됩니다. 예외가 다른 예외를 원인으로 발생할 때, 원인 예외를 cause로 설정하면 예외의 원인을 추적하고 디버깅하는 데 유용합니다. 이를 통해 예외가 발생한 맥락을 더 잘 이해하고, 문제를 해결할 수 있습니다.


4. 어떤 경우에 사용하는지

주로 두 가지 경우에서 Throwable cause를 사용합니다:

  • 예외 체인 만들기: 예외가 다른 예외에서 발생한 경우, 발생한 예외의 원인 예외를 cause로 전달하여 예외 체인을 만듭니다.
    • 예를 들어, 데이터베이스 연결 오류가 발생했을 때, 해당 오류의 원인 예외로 SQL 예외를 설정할 수 있습니다.
  • 다른 예외를 감싸는 경우: 예외를 처리하는 코드에서, 다른 예외를 감싸서 던지거나 새 예외를 생성할 때 cause를 전달하여 원인 예외를 전달합니다.
    • 예를 들어, 파일 처리 도중 예외가 발생했을 때, 해당 예외를 **FileProcessingException**으로 감싸서 던질 수 있습니다.

5. 사용 예시

다음은 Throwable cause를 사용하여 예외를 체인으로 연결하는 예시입니다:

public class BusinessException extends Exception {
    public BusinessException(ErrorCode errorCode, Throwable cause) {
        super(errorCode.getMessage(), cause);  // 원인 예외(cause)를 super 클래스에 전달
    }
}

public class Example {
    public void process() throws BusinessException {
        try {
            // 예외가 발생할 수 있는 코드
            someMethod();
        } catch (SQLException e) {
            // SQLException을 BusinessException으로 감싸서 던짐
            throw new BusinessException(ErrorCode.DATABASE_ERROR, e);
        }
    }

    public void someMethod() throws SQLException {
        // 데이터베이스 관련 코드에서 오류 발생
        throw new SQLException("Database connection failed");
    }
}

 

위 코드에서:

SQLException이 발생한 후, 그 원인 예외를 BusinessException의 cause로 전달하여, 예외 체인이 연결됩니다.

BusinessException 객체는 SQLException을 원인으로 갖는 예외가 됩니다. 이렇게 하면 예외가 발생한 원인을 쉽게 추적할 수 있습니다.


6. Throwable cause와 Throwable의 관계

Throwable 자체는 모든 예외의 최상위 클래스입니다. cause는 예외가 발생했을 때 그 예외의 원인을 나타내는 또 다른 Throwable 객체입니다. 예를 들어, SQLException이 발생하면, SQLException을 BusinessException의 cause로 전달하여, 실제 예외 원인을 추적할 수 있게 해줍니다.


요약

Throwable cause는 예외의 원인을 명시적으로 지정하여, 더 나은 디버깅문제 해결을 돕습니다. 예외 체인을 활용하면 복잡한 예외 처리 상황에서 발생 원인을 쉽게 파악할 수 있습니다.


출처: chat gpt

 

 

'Java > SpringBoot' 카테고리의 다른 글

JWT 토큰 발행 받기  (0) 2024.11.08
@JsonInclude  (1) 2024.11.07
Builder  (0) 2024.11.07
Enum  (1) 2024.11.07
@JsonFormat  (0) 2024.11.07