1. 커스텀 예외(Custom Exception)
일반 예외로 선언할 경우 Exception을 상속받아 구현
실행 예외로 선언할 경우에는 RuntimeException을 상속받아 구현
- 사용자 정의 예외 클래스는 컴파일러가 체크하는 일반 예외로 선언할 수도 있고, 컴파일러가 체크하지 않는 실행 예외로 선언할 수도 있습니다.
- 일반 예외로 선언할 경우 Exception을 상속하면 되고, 실행 예외로 선언할 경우에는 RuntimeException을 상속하면 됩니다.
- 사용자 정의 예외 클래스 이름은 Exception으로 끝나는 것을 권장합니다.
- 사용자 정의 예외 클래스 작성 시 생성자는 두 개를 선언하는 것이 일반적입니다.
- 매개 변수가 없는 기본 생성자
- 예외 발생 원인(예외 메시지)을 전달하기 위해 String 타입의 매개변수를 갖는 생성자
- 예외 메시지의 용도는 catch {} 블록의 예외처리 코드에서 이용하기 위해서입니다.
2. 예시
- RuntimeException을 상속받아 작성한 사용자 정의 예외입니다.
public class CustomException extends RuntimeException {
// 1. 매개 변수가 없는 기본 생성자
CustomException() {
}
// 2. 예외 발생 원인(예외 메시지)을 전달하기 위해 String 타입의 매개변수를 갖는 생성자
CustomException(String message) {
super(message); // RuntimeException 클래스의 생성자를 호출합니다.
}
}
3. 예외 발생시키기
throw new 예외();
throw new 예외("메시지");
커스텀 예외 활용
- 강제로 예외를 발생시켜 메소드를 호출한 곳에서 커스텀 예외를 처리합니다.
public static void main(String[] args) {
try{
test();
} catch (CustomException e) {
System.out.println("커스텀 예외 테스트");
}
}
public static void test() throws CustomException {
throw new CustomException("예외 테스트 입니다.");
}
예외 정보 얻기
- try 블록에서 예외가 발생되면 예외 객체는 catch 블록의 매개 변수에서 참조하게 되므로 매개 변수를 이용하면 예외 객체의 정보를 알 수 있습니다.
- 모든 예외 객체는 Exception 클래스를 상속하기 때문에 Exception이 가지고 있는 메소드들을 모든 예외 객체에서 호출할 수 있습니다.
- Exception는 Throwable를 상속받고 Throwable에 객체의 정보를 얻을 수 있는 메소드를 가지고 있습니다.
- 주로 자주 사용되는 메소드는 getMessage()와 printStackTrace()입니다.
public class Exception extends Throwable {
public Exception() {
super();
}
public Exception(String message) {
super(message);
}
// (. . .) 생략
}
public class Throwable implements Serializable {
public String getMessage() {
return detailMessage;
}
public void printStackTrace() {
printStackTrace(System.err);
}
// (. . .) 생략
}
getMessage()
- String 타입의 매개변수 메시지를 갖는 생성자를 이용하였다면, 메시지는 자동적으로 예외 객체 내부에 저장되게 되는데 이 메시지를 리턴하는 함수입니다.
- 예외 메시지의 내용에는 왜 예외가 발생했는지에 대한 간단한 설명이 포함됩니다.
printStackTrace()
- 예외 발생 코드를 추적해서 모두 콘솔에 출력합니다.
- 어떤 예외가 어디에서 발생했는지 상세하게 출력해주기 때문에 프로그램을 테스트하면서 오류를 찾을 때 활용합니다.
커스텀 예외 활용
public static void main(String[] args) {
try{
test();
} catch (CustomException e) {
System.out.println("커스텀 예외 테스트");
System.out.println(e.getMessage());
e.printStackTrace();
}
}
public static void test() throws CustomException {
throw new CustomException("예외 테스트 입니다.");
}
'Backend > Java' 카테고리의 다른 글
[Java] 자바 8 Stream API 필터링 (filter, distinct) (0) | 2022.01.01 |
---|---|
[Java] 자바 8 Stream API 소개 (java.util.stream) (0) | 2021.12.31 |
[Java] 자바 예외 넘기기 (throws) (0) | 2021.12.27 |
[Java] 자바 try-with-resource (AutoCloseable) (0) | 2021.12.26 |
[Java] 자바 예외 처리(Exception, RuntimeException) (0) | 2021.12.25 |