이미 예외처리에 대해서는 이전 글에서 다뤄보았지만, 사용자 정의 예외(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)
throws는 sum을 사용하는 곳(main)에서 예외 처리를 하도록 설정해주는 것입니다.elementException : 사용자 정의 예외 처리를 설정해줍니다. 매개변수인 a는 e.getMessage()에서 출력됩니다.
## 출력 결과
3
-1
음수 값 입력 금지
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 문을 통해서 비교해주고 예외에 대한 출력을 해주기만 하였는데요,
사용자 정의 예외 클래스를 두어 예외 기능에 대한 역할을 해당 클래스가 집중할 수 있도록 분리해주고, 그에 맞는 출력문을 리턴할 수 있도록 해야겠습니다.
프로그램 기능이 많아질수록 사용자 예외 처리는 필수인 듯합니다! 👍
