예외클래스를 만들어 위험을 알릴 수 있다.
Exception을 상속받아서 예외 클래스로 만들어주고 해당 예외가 어떤 위험을 가지고 있는지 메세지를 던져줄 수 있다.
public class OurBadException extends Exception{
public OurBadException () {
super("위험한 행동을 하면 예외처리를 꼭 해야함!!");
}
}
public class OurClass {
private final boolean just = true;
// throws로 해당 메소드는 OurBadException에러가 발생할 수 있다는 것을 알림
public void thisMethodIsDangerous() throws OurBadException {
// custom logic
// custom logic
// custom logic
// 해당 조건에 걸리면 고의적으로 에러를 발생시킴
if (just) {
// OurBadException에러를 발생시키고 메서드를 종료함
throw new OurBadException();
}
}
}
실제로 예외를 처리하여 컴파일에러를 방지할 때 사용되는 구문
public static void main(String[] args) {
OurClass ourClass = new OurClass();
try {
// 1. 위험한 메소드의 실행을 "시도" 해 봅니다.
// "시도" 해보는 코드가 들어가는 블럭입니다.
ourClass.thisMethodIsDangerous();
} catch (OurBadException e) {
// 2. 예외가 발생하면, "잡아서" handling 합니다.
// 예외가 발생하는경우 "handling" 하는 코드가 들어가는 블럭입니다.
// 즉 try 블럭 내의 구문을 실행하다가 예외가 발생하면
// 예외가 발생한 줄에서 바로 코드 실행을 멈추고
// 여기 있는 catch 블럭 내의 코드가 실행됩니다.
System.out.println(e.getMessage());
throw new RuntimeException(e);
} finally {
// 3. 예외의 발생 여부와 상관없이, 실행시켜야 하는 코드가 들어갑니다.
// 무조건 실행되는 코드가 들어가는 블럭입니다.
System.out.println("예외 처리를 handling했음 정상 처리 되던, 예외가 발생하던 finally는 항상 실행됨");
}
}
print로 에러의.getMessage()를 출력하면 인지하기가 굉장히 어렵기 때문에
RuntimeException를 새로 만들고 발생한 에러(e)를 넣어 던져주면 경로 확인이 가능하다.