[Java] 예외 처리 (2)

우쓰·2023년 11월 6일
0

Java

목록 보기
4/10

Content

1. 예외 떠넘기기

예외가 발생할때 try-catch 블록으로 처리하지만
throws 를 사용하여 메소드를 호출한 곳으로 예외를 떠넘기는 방법도 존재한다.

public class ThrowExample1 {

  public static void main(String[] args) {
    try {
      findClass();
    } catch (ClassNotFoundException e) {
      System.out.println("예외 처리: " + e.toString());
    }
  }

  private static void findClass() throws ClassNotFoundException{
    Class.forName("java.lang.String2");
  }



}

메소드 끝에 throws를 작성하여 예외 클래스를 쉼표로 구분하여 나열해주면 된다.

findClass() 메소드를 호출한 곳에서 try-catch문을 사용하여 예외 처리해주는 것을 확인할 수 있다.

2. 사용자 정의 예외

사용자 정의 예외 클래스에는 기본 생성자와 예외 메시지를 입력받는 생성자를 선언해준다.
공통메소드인 getMessage()의 리턴값으로 사용하기 위해서 부모 생성자 매개값으로 넘겨준다.

잔고 부족 예외 예시

public class InsufficientException extends Exception {
  public InsufficientException () {
  }
  public InsufficientException(String message) {
    super(message);
  }
}
public class Account {
  private long balance;
  
  public Account() {
    
  }
  
  public long getBalance() {
    return balance;
  }

  public void deposit(int money) {
    balance += money;
  }
  
  // 호출한 곳으로 예외를 떠넘긴다.
  public void withdraw(int money) throws InsufficientException{
    if (balance < money) {
      throw new InsufficientException("잔고 부족: " + (money - balance) + " 모자람");
    }
    balance -= money;
  }
  
}

메인

public class AccountExample {

  public static void main(String[] args) {
    Account account = new Account();

    account.deposit(10000);
    System.out.println("예금: " + account.getBalance());

    try {
      account.withdraw(12000);
    } catch (InsufficientException e) {
      System.out.println(e.getMessage());
    }
  }
}

콘솔

예금: 10000
잔고 부족: 2000 모자람

I Learned

  • throws는 예외를 떠넘겨 호출하는 곳에서 예외 처리를 해주어야 한다.

  • 예외 클래스가 많을 경우 상위 클래스인 Exception또는 Throwable 로 모든 예외를 떠넘길 수 있다.

  • 표준 라이브러리에 존재하지 않는 예외는 직접 예외 클래스를 정의하여 사용할 수 있다.

  • 사용자 정의 예외를 발생시키려면 throw 키워드를 사용하여 예외 객체를 제공한다.

0개의 댓글