2021-06-28 강의록_예외처리(사용자정의예외)
사용자 정의 예외 클래스
자바 API에서 제공하지 않는 예외.
사용자정의 예외를 정의할 때,
비즈니스 로직에 정의되어있어 예상 가능한 예외는 > Checked Exception (Exception 상속)
예상 불가능한 예외는 > Runtime Exception 으로 만들어야 한다.
대부분 Checked Exception 으로 정의함.
Runtime Exception 은 거의 만들일이 없음!
public class XXXException
extends [Exception | RuntimeExveption] {
public XXXException(){ //default 생성자로, 예외클래스 이름(타입명)만 출력됨.
;;
}
public XXXExeption(String message){ //예외객체 만들 때, 생성자 통해 예외 메시지까지 출력함.
super(message);
}
예외 발생시키기
throw new XXXExveption();
throw new XXXExveption("메시지");
위와 같이 발생시킴.
이처럼 메소드 블록에 throw 키워드를 사용하면, 메소드 시그니처 오른쪽에 반드시 throws 절로 예외를 던져줘야 한다!
(반대로 throw 키워드가 없을 때 throws 절 사용하는것은 상관 없음!
어차피 throw 키워드는 조건이 부합했을 때에만 발생하니까)
import lombok.NoArgsConstructor;
import lombok.extern.log4j.Log4j2;
@Log4j2
@NoArgsConstructor
public class Account {
private long balance; //현재잔고 (상태필드)
public long getBalance() { //Getter Method
return balance;
} //getBalance
public void deposit(int money) { //예금
balance += money;
} //deposit
public void withdraw(int money) //출금
throws BalanceInsufficientException {
if(balance < money) {
//지정한 금액을 계좌에서 출금시, 잔고가 부족하면 실행
//throw 키워드 >> 예외 발생시킴
throw new BalanceInsufficientException("잔고부족 : " + (money-balance)+ " 모자람"); //예외객체 발생시켜서 throw
} //if
balance -= money;
} //withdraw
} //end class
예외객체 Wrapping
import java.io.IOException;
import lombok.extern.log4j.Log4j2;
@Log4j2
public class AccountEx {
public static void main(String[] args) throws IOException {
Account account = new Account();
//예금하기
account.deposit(10000);
log.info("예금액 : " + account.getBalance());
//출금하기
try {
account.withdraw(30000);
} catch(BalanceInsufficientException e) {
e.printStackTrace();
String message = e.getMessage();
log.info(message);
throw new IOException(e); //오리지널 예외객체인 e를 IOException 생성자의 매개변수로 넣음 >> IOException 을 Wrapper객체로 만든다.
} //try-catch
} //main
} //end class
오리지널 예외객체인 BalanceInsufficientException e 를
IOExeption 생성자의 매개변수로 넣어줌 >> Wrapping한다!
throw로 예외객체 발생시켰기 때문에, main메소드 시그니처 옆에 throws절 필요.
stack tace를 보면, Caused by <<절 있는데,
original 예외객체 때문에 Wrapper예외 발생했음을 표시해준다.
이 wrapping은 중첩해서 사용할 수 있음!
Wrapping한 횟수만큼 스택트레이스에 Caused by 가 표시됨.
Author And Source
이 문제에 관하여(2021-06-28 강의록_예외처리(사용자정의예외)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mindddi/2021-06-28-강의록예외처리사용자정의예외저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)