try-catch로 막아버리면, 바깥에서는 예외를 알 수 없음특정 상황에서 발생한 오류를 명확하게 구분하고 싶을 때. 직접 예외 클래스를 정의하자!
RuntimeException을 상속한 클래스 정의throw new 커스텀Exception(...)throw : 에러 강제 발생throws붙여서 그 메서드를 호출한 곳으로 예외 전달 (던져버리자!)public class ProductException extends RuntimeException {
/* 자바에서는 부모 생성자를 자동으로 상속하지 않기 때문에,
* super(매개변수)를 호출하여 부모 클래스(RuntimeException)의 생성자를 명시적으로 호출해야 함.*/
// 에러 메시지를 예외 객체에 담고 싶을 때 사용하는 생성자
public ProductException(String msg) {
super(msg);
}
/* Throwable은 모든 예외 클래스의 최상위 타입이기 때문에 어떤 예외든 받아 처리할 수 있음 */
// 다른 예외 객체(e)를 그대로 감싸서 전달하고 싶을 때 사용하는 생성자.
public ProductException(Throwable e) {
super(e);
}
public ProductException(String msg, Throwable e) {
super(msg, e);
}
}