728x90
throw : 강제로 예외 발생시키기(1인칭. 내가 예외를 발생시킴)
public class Test{
public static void main(String[] args) {
int i = 10;
int j = 0;
try{
int k = divide(i, j);
System.out.println(k);
}catch(IllegalArgumentException e){
System.out.println("0으로 나누면 안됨");
}
}
// throws 부분 : 해당 오류는 divide를 호출한 쪽에서 처리를 해야한다는 것을 의미
public static int divide(int i, int j) throws IllegalArgumentException{
if(j == 0){
// 익셉션을 발생시킴 -> 익셉션을 처리해야 함
// ->(try-catch or 메소드 호출하는 곳에서 처리하게 하는 방법 사용
throw new IllegalArgumentException("0으로 나눌 수 없음");
}
int k = i / j;
return k;
}
}
사용자 정의 Exception : Exception이나 Exception의 후손을 상속받아 만들어진 클래스
클래스 이름만으로 어떤 오류가 발생했는지 알려주어 코드의 직관성을 높인다.
- Exception 클래스를 상속 받아 정의한 checked Exception
- 반드시 오류를 처리 해야만 하는 Exception
- 예외 처리하지 않으면 컴파일 오류를 발생시킨다.
- RuntimeException 클래스를 상속 받아 정의한 unChecked Exception
- 예외 처리하지 않아도 컴파일 시에는 오류를 발생시키지 않는다.
// RuntimeException을 상속받은 BizException 객체
public class BizException extends RuntimeException {
// BizException에서 어떤 오류가 발생했는지 string 값으로 메시지를 가지고 들어오는 생성자 정의
public BizException(String msg){
super(msg);
}
// Exception을 받아들여서 해당 익셉션을 부모의 생성자에게 넘겨줄 수 있는 생성자 정의
public BizException(Exception ex){
super(ex);
}
}
// BizService 클래스는 업무를 처리하는 메소드를 가지고 있다고 가정
public class BizService {
public void bizMethod(int i)throws BizException{
System.out.println("비지니스 로직이 시작합니다.");
// 매개변수로 들어온 i가 0보다 작다면 Exception 발생(throw new를 통해서)
if(i < 0){
// BizException에서 string으로 매개변수를 받아들일 수 있었음
throw new BizException("매개변수 i는 0이상이어야 합니다.");
}
System.out.println("비지니스 로직이 종료됩니다.");
}
}
// 앞에서 만든 BizService를 이용하는 BizExam클래스
public class BizExam {
public static void main(String[] args) {
BizService biz = new BizService();
biz.bizMethod(5);
try{
biz.bizMethod(-3);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
728x90
'강의 정리하기 > JAVA' 카테고리의 다른 글
기본 API 클래스(2) - 컬렉션 (0) | 2023.03.09 |
---|---|
기본 API 클래스(1) (0) | 2023.03.08 |
Exception 예외 처리(1) (0) | 2023.03.07 |
중첩 클래스와 익명 클래스 (0) | 2023.03.07 |
클래스 형변환 (0) | 2023.03.05 |