예외처리를 하는 방식에 대해 java가 제공하는 exception을 사용할 수도 있지만, 사용자가 직접 정의해서 사용하는 exception을 활용할 수도 있다.
이 사용자 정의 exception의 종류는 두가지가 존재한다.
사용자 정의 exception는 명명을 통해 어떠한 오류를 처리하는지 파악할 수 있기 때문에, 직관성이 높아지는 효과를 얻을 수 있다.
아래와 같은 방법으로 구현할 수 있는데, RuntimeException을 상속받은 예외 class이다.
※ RuntimeException은 예외처리를 반드시 해주지 않아도 되는 unchecked exception이다.
사용자 exception를 선언하는데, 상속받는 exception class의 부모생성자를 활용하여 오류처리를 한다.
public class BizException extends RuntimeException{
public BizException(String msg){
super(msg);
}
public BizException(Exception ex){
super(ex);
}
}
위에서 정의한 exception에 대해, 특정 exception 상황이 발생하는 예외 상황을 정의하고 처리해준다.
public class BizService{
public void bizMethod(int i) throws BizException{
//전달받은 인자 i가 0보다 작다면
//위에서 선언한 exception을 활용하여 예외처리를한다.
if(i<0){
throw new BizException("전달받은 인자가 0보다 작습니다.");
}
}
}
위와 같이 특정 상황에 대해 예외처리를 발생하고자 한다면, throw new 구문을 사용한다.
다만 클래스 정의 상에서 예외를 상속받는다면 throws를 사용한다.
public class BizTest{
public void main(String[] args){
BizService biz = new BizService();
biz.bizMethod(2);
biz.bizMethod(-5); //인자가 0보다 작으므로 예외상황이 발생
}
}
인자가 -5 전달되었을때 throw new BizException 구문이 동작하여 예외상황이 발생하게 되고, 기본적으로 인자를 전달한 BizTest 측에서 해당 오류를 처리하게 된다.
checked exception의 경우엔 main class 내에서 해당 오류를 처리하기 위한 try-catch 문을 처리해야 하고, 본 구문은 unchecked 이므로 오류처리가 필수는 아니다.
문법적, 구조적 오류가 있는 경우엔 try-catch 구문 활용
문법적, 구조적 오류가 없어도 예외 상황이 발생할 수 있는 경우(위와 같이) if-throw 구문 활용