본문 바로가기
쿤즈 Dev/Java

[Java] 사용자 정의 예외 Custom Exception

by :)Koon 2023. 9. 26.

지난 두 포스팅에서는 예외에 대해서 알아보았다. 특히 예외에는 계층구조가 있고 이로 인해서 조금 더 안정적인 프로그래밍이 가능하다는 것도 알았다.

이번 포스팅에서는 기본으로 제공되지 않는 예외를 직접 만들어서 사용하는 사용자 정의 예외에 대해서 알아보자.


사용자 정의 예외 Custom Exception

자바(Java)에서는 기본적으로 제공되는 예외 클래스 외에도 프로그래머가 직접 정의하는 예외 클래스를 만들 수 있다. 이것을 사용자 정의 예외 혹은 커스텀 예외라 한다. 이러한 예외 클래스는 특정 프로그램 논리 또는 비즈니스 룰에 따라 예외를 발생시킬 때 사용된다. 사용자 정의 예외 클래스를 만들어서 예외를 더 잘 관리하고 명확한 예외 메시지를 제공할 수 있다.

 

사용자 정의 클래스를 만드려면 다음 단계를 따를 수 있다.


Exception 클래스 상속

사용자 정의 예외 클래스를 만들기 위해 기존의 Exception 클래스 중 하나를 상속한다. 일반적으로 Exception 또는 그 하위 클래스 중 하나를 선택한다.

 

생성자 정의

사용자 정의 예외 클래스의 생정자를 정의한다. 그리고 예외 메시지와 함께 예외 객체를 조기화하는 데 필요한 정보를 전달한다. 이 예외 메시지는 예외 발생 시에 디버깅 및 로딩에 도움이 된다.

 

예외 발생 조건 추가

예외를 발생시키는 조건을 정의한다. 이 조건은 보통 프로그램의 비즈니스 룰이나 로직에 따라 결정된다.

 

예외처리

예외를 발생시키는 코드에서 해당 예외를 throw 하여 예외를 발생시킨다. 이후 예외를 처리하는 코드를 작성한다. 이 처리 코드는 try-catch 블록을 사용하여 예외를 캐치하거나 thorws 예약어를 사용하여 상위 메서드로 전파할 수 있다.


예를 들어서 두 양수를 받아 계산하는 프로그램을 만들어 볼 때, 음수의 경우 예외를 전달하도록 처리해 보자.

public class NegativeNumberException extends Exception{
    public NegativeNumberException(String message) {
        super(message);
    }
}

먼저 음수를 받으면 발생시킬 커스텀 예외를 만들어 준다.

public class CalculatorTest {
    public static void main(String[] args) {
       try {
           int result = calculateAdd(-1, 3);
           System.out.println("결과: " + result);
       } catch (NegativeNumberException e) {
           System.out.println("예외 발생: " + e.getMessage());
       }
    }

    public static int calculateAdd(int a, int b) throws NegativeNumberException {
        if (a < 0 || b < 0) {
            throw new NegativeNumberException("음수는 입력할 수 없어요. [" + a + ", " + b + "]");
        }

        return a + b;
    }
}

다음은 메인메서드에서 두 수를 더하는 메서드를 호출한다. 이 메서드는 thorws를 이용해서 예외 처리를 해주었다. 두 수중 하나라도 음수가 들어오면 예외를 발생시킨다.

메인 메서드에서는 try-catch 블록을 이용해서 예외를 처리해 주었다.


이번 포스팅에서는 사용자 정의 예외를 알아보았다. 사용자 정의 예외를 만들면 코드의 가독성을 높이고 보다 구체적으로 예외들을 관리할 수 있다. 보통은 굉장히 많은 예외들을 만들고 있기 때문에 다양하게 관리하는 방법들이 존재한다.

댓글