애플리케이션의 요구 사항에 따라 의미 있는 예외를 직접 만들어야 하는 경우가 있습니다. Java에서는 Exception 클래스를 상속하여 자신만의 예외를 생성할 수 있으며, 이렇게 개발자가 직접 정의한 예외를 사용자 정의 예외(User-defined Exception) 또는 커스텀 예외(Custom Exception)라고 부릅니다.
커스텀 예외 생성 단계와 예제
CustomException클래스는 커스텀 예외 클래스로,Exception클래스를 상속(extends)하여 정의합니다.- 예외 메시지를 객체 내부에 보관하기 위해 멤버 변수
message를 선언합니다. - 커스텀 예외 객체의 생성자에 문자열 인수를 전달하며, 생성자는 전달받은 문자열을 변수
message에 저장합니다. toString()메서드는 예외 메시지를 출력하는 데 사용됩니다.main메서드에서 try-catch 블록으로CustomException을 던져(throw) 보고, 커스텀 예외를 생성할 때 문자열이 어떻게 전달되는지 확인합니다. catch 블록 안에서는 해당 메시지를 출력합니다.
예제 코드
class CustomException extends Exception {
String message;
CustomException(String str) {
message = str;
}
public String toString() {
return ("Custom Exception Occurred : " + message);
}
}
public class MainException {
public static void main(String args[]) {
try {
throw new CustomException("This is a custom message");
} catch(CustomException e) {
System.out.println(e);
}
}
}
실행 결과
Custom Exception Occurred : This is a custom message
알아두면 좋은 추가 팁
Exception을 상속하면 체크드 예외(checked exception)가 되어 컴파일 시점에 반드시 예외 처리를 해야 하며,RuntimeException을 상속하면 언체크드 예외(unchecked exception)가 됩니다.- 생성자에서
super(str)을 호출해 부모 클래스에 메시지를 전달하면, 이후getMessage()메서드로도 예외 메시지를 손쉽게 확인할 수 있습니다. - 직렬화 관련 경고를 방지하려면
serialVersionUID필드를 함께 정의하는 것이 좋습니다. - 예외 이름은 발생 상황을 명확히 나타내도록 지으면(예:
InvalidUserInputException) 코드 가독성과 유지보수성이 크게 향상됩니다.