이미 예외처리에 대해서는 이전 글에서 다뤄보았지만, 사용자 정의 예외(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
문을 통해서 비교해주고 예외에 대한 출력을 해주기만 하였는데요,
사용자 정의 예외 클래스를 두어 예외 기능에 대한 역할을 해당 클래스가 집중할 수 있도록 분리해주고, 그에 맞는 출력문을 리턴할 수 있도록 해야겠습니다.
프로그램 기능이 많아질수록 사용자 예외 처리는 필수인 듯합니다! 👍