프로그램을 개발하다 보면 자바에서 제공하는 표준 API의 예외 클래스만으로는 다양한 예외 상황에 대처하기 어렵습니다. 자바에서는 일반 예외(java.lang.Exception) 또는 런타임 예외(java.lang.RuntimeException)을 상속하여 사용자 정의 예외 클래스를 구현 할 수 있습니다.
사용자 정의 예외 클래스
사용자 정의 예외 클래스는 일반적으로 다음 규칙을 갖습니다.
- 일반 예외(java.lang.Exception) 또는 런타임 예외(java.lang.RuntimeException)를 상속
- 클래스 이름은 XXXException으로 작명
- 생성자, 필드, 메소드 선언을 포함 할 수 있지만 일반적으로는 생성자만을 선언
- 디폴트 생성자와 예외 발생 원인(메시지 등)을 처리하기 위한 생성자를 오버로딩
일반 예외 상속 예시
다음 예시 코드는 예외 클래스 생성 규칙에 따라서 작성한 사용자 예외입니다. java.lang.Exception 클래스를 상속받고 있으며 디폴트 생성자와 String을 인자로 받는 생성자를 오버로딩하고 있습니다.
public class CustomException extends Exception {
public CustomException() {
}
public CustomException(String _cause) {
super(_cause);
}
}
String을 인자로 받는 생성자는 부모 클래스의 생성자를 호출합니다. super(_cause) 내부에서는 문자열을 String detailMessage 필드에 저장합니다. detailMessage 필드는 예외 처리에서 예외 원인으로 사용됩니다.
사용자 예외 클래스를 테스트하기 위해 다음과 같은 코드를 추가로 작성합니다. 예외가 catch 되면 예외 객체의 getMessage() 메소드를 호출하여 예외 원인을 출력합니다.
try {
throw new CustomException("custom exception thrown");
} catch (CustomException e) {
System.out.println(e.getMessage());
}
코드 실행 결과는 다음과 같습니다. 출력되는 예외 원인은 예외 객체의 생성시 인자로 전달된 문자열입니다.
custom exception thrown
'Java > Java SE, EE' 카테고리의 다른 글
[Java/Java SE, EE] 객체의 해시코드를 반환하는 hashcode(), 해시코드 연산에 31을 사용하는 이유 (0) | 2022.04.06 |
---|---|
[Java/Java SE, EE] equals()와 비교 연산자 == (0) | 2022.04.06 |
[Java/Java SE, EE] try-with-resources 리소스 자동 닫기 (0) | 2022.04.06 |
[Java/Java SE, EE] 예외 처리 try-catch-finally, throws (0) | 2022.03.17 |
[Java/Java SE, EE] 예외(Exception)와 런타임 예외(Runtime exception) (0) | 2022.03.14 |