-
Java - Custom ExceptionLanguage/Java 2022. 9. 29. 14:09
Custom Exception
Custom Exception 만들기
기존에 정의된 예외 클래스 이외에 필요에 따라 새로운 예외 클래스를 정의하여 사용할 수 있다. 일반적으로 Exception 클래스를 상속받는 클래스를 만들지만, 필요에 따라서 알맞은 예외 클래스를 상속받아서 만든다. String 타입의 파라미터를 갖는 생성자는 상위 클래스의 생성자를 호출하여 예외 메시지를 넘겨준다.
public class InSufficientBalanceException extends Exception { public InSufficientBalanceException(String message) { super(message); } }
위 코드는 잔고 부족 예외를 사용자 정의 클래스로 정의한 것이다. InsufficientBalanceException은 Exception을 상속받기 때문에 컴파일러에 의해 체크되는 예외가 된다.
public class Account { private long balance; public long getBalance() { return balance; } public void setBalance(long balance) { this.balance = balance; } public void deposit(int money) { balance += money; } public void withdraw(int money) throws InSufficientBalanceException { if (balance < money) { throw new InSufficientBalanceException("잔고 부족 : " + (money - balance) + "원이 모자랍니다."); } balance -= money; } }
위 코드는 은행 계좌(Account) 클래스를 작성한 것이다. 출금(withdraw) 메서드에서 잔고(balance)와 출금액(money)을 비교해서 잔고가 부족하면 InSufficeBalanceException을 발생시키도록 하였다.
public class Main { public static void main(String[] args) { Account account = new Account(); account.deposit(1_000_000); System.out.println("예금액 : " + account.getBalance()); try { account.withdraw(1_500_000); } catch(InSufficientBalanceException e) { System.out.println(e.getMessage()); System.out.println(); e.printStackTrace(); } } }
예금액 : 1000000 잔고 부족 : 500000원이 모자랍니다. InSufficientBalanceException: 잔고 부족 : 500000원이 모자랍니다. at Account.withdraw(Account.java:18) at Main.main(Main.java:10)
try 블록에서 예외가 발생하면 예외 객체는 catch 블록의 매개변수에서 참조하므로 매개변수를 이용하면 예외 객체의 정보를 알 수 있다.
모든 예외 객체는 Exception을 상속받기 때문에 getMessage( )와 printStackTrace( ) 메서드 등을 예외 객체에서 호출할 수 있다.
위 코드는 Account 클래스를 이용해서 예금과 출금을 하는 예제이다. 출금할 때 withdraw( ) 메서드를 이용하기 때문에 반드시 예외 처리를 해주어야 한다.
출처
ㆍ https://dev-coco.tistory.com/18?category=962739
728x90'Language > Java' 카테고리의 다른 글
Java - 람다식의 개념과 사용 방법 (0) 2022.11.29 Java - 열거 타입(enum) (0) 2022.11.29 Java - 예외 처리 (0) 2022.09.29 Java - Exception (0) 2022.09.29 Java - 추상 클래스 & 인터페이스 (0) 2022.09.21