자바의 사용자 정의 예외

포모·2020년 12월 14일
0

JAVA의 기본

목록 보기
7/9

이미 예외처리에 대해서는 이전 글에서 다뤄보았지만, 사용자 정의 예외(CustomException)는 같이 정리하지 못했습니다.. 😱

무엇인지 한번 알아보도록 하겠습니다!

사용자 정의 예외란

프로그램을 개발하다보면 자바 표준 API가 제공하는 예외 클래스만으로 다양한 종류의 예외를 다 표현할 수 없습니다.

이때, 직접 정의하여 사용하는 예외를 사용자 정의 예외라고 합니다.


  • 사용자 정의 예외는 반드시 java.lang.Exception 클래스를 상속받아 정의해야합니다.
  • 사용자 정의 예외는 JVM에서 예외를 발생시켜 주지 않으므로 직접 예외를 생성해야합니다.
  • 예외 생성 하기 : throw new 사용자정의예외()

예제

두 값을 더하는 sum() 함수에서 음수 값이 들어가는 경우 예외 처리해주는 사용자 정의 예외처리를 만들어보았습니다.


class elementException extends Exception {
    public elementException(String a) {
        super(a);
    }
}

public class Test {
    public static int sum() throws elementException {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();

        if (a<0 || b<0) {
            throw new elementException("음수 값 입력 금지");
        }
        return a+b;
    }

    public static void main(String[] args) {
        try {
            System.out.printf("합 : %d", sum());
            System.out.println("sum 함수 실행 완료");
        } catch (elementException e) {
            System.out.println(e.getMessage());
        }
        System.out.println("try catch 문 실행 완료");
    }
  • main : sum() 함수를 호출합니다. 만약 sum()에서 예외가 발생하면 예외 메시지를 입력해줍니다.

  • sum : 예외 처리할 조건을 걸어줍니다. 👉 if (a<0 || b<0)

    • throwssum을 사용하는 곳(main)에서 예외 처리를 하도록 설정해주는 것입니다.
  • elementException : 사용자 정의 예외 처리를 설정해줍니다. 매개변수인 ae.getMessage()에서 출력됩니다.


## 출력 결과
3
-1
음수 값 입력 금지
try catch 문 실행 완료

Try ~ Catch문이 없다면?

만약 main문에서 try ~ catch 처리를 해주지 않는다면 어떻게 될까요?

public static void main(String[] args) {
        System.out.printf("합 : %d", sum());
        System.out.println("sum 함수 실행 완료");
}

## 출력 결과
3
-1
Exception in thread "main" elementException: 음수 값 입력 금지
	at Test.sum(Test.java:16)
	at Test.main(Test.java:22)

에러 메시지가 표시되면서 프로그램이 강제 종료됩니다.
위에서 try catch문이 종료됐다는 출력문이 있는 것으로 보아, main문에서 예외처리 해주고 catch 뒤에 이어지는 프로그램을 마저 실행하는 것을 볼 수 있었습니다.


🛴 마무리

저는 원래 if 문을 통해서 비교해주고 예외에 대한 출력을 해주기만 하였는데요,
사용자 정의 예외 클래스를 두어 예외 기능에 대한 역할을 해당 클래스가 집중할 수 있도록 분리해주고, 그에 맞는 출력문을 리턴할 수 있도록 해야겠습니다.

프로그램 기능이 많아질수록 사용자 예외 처리는 필수인 듯합니다! 👍

0개의 댓글