19.04.11 예외 처리, 예외 떠넘기기, 사용자 정의 예외

카테고리 없음 2019. 4. 11. 15:58
728x90
반응형

-예외 처리 코드-


예외가 발생했을 경우 프로그램의 갑작스러운 종료를 막고, 정상 싱행을
유지할 수 있도록 처리하는 코드
예외 처리 코드는 try-catch-finally 블록을 이용하고, 생성자 내부와 메소드 내부에서 작성함




-예외 처리 코드 (catch 순서)-


상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 한다.
왜냐하면 하위 예외는 상위 예외를 상속했기 때문에 상위 예외 타입도 되기 때문이다.




-예외 떠넘기기-


throws 키워드는 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를
호출한 곳으로 떠넘기는 역할을 한다. throws 키워드 뒤에는 떠넘길 예외 클래스를
쉼표로 구분해서 나열해주면 된다.




-사용자 정의 예외-


애플리케이션 서비스와 관련된 예외를 애플리케이션 예외 또는 사용자 정의 예외 라고 한다.

사용자 정의 예외 클래스도 필드, 생성자, 메소드 선언들을 포함할 수 있지만 대부분 생성자 선언만 포함한다.

하나는 매개 변수가 없는 기본 생성자이고, 다른 하나는 예외 발생 원인(메시지)를 전달하기 위해 String 타입의 매개 변수를 갖는 생성자이다.

String 타입의 매개 변수를 갖는 생성자는 상위 클래스의 생성자를 호출하여 예외 메시지를 넘겨준다.


-예제 및 출력 결과-


예외가 발생되어 메소드 호출 위치로 예외가 떠넘겨짐


1
2
3
4
5
6
7
8
9
10
11
12
13
package com.hs.chap10;
 
public class BalanceInsufficientException extends Exception {
 
    public BalanceInsufficientException() {
 
    }
 
    public BalanceInsufficientException(String message) {
        super(message);
    }
}
 
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.hs.chap10;
 
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 BalanceInsufficientException {  //사용자 정의 예외 떠넘기기
        if (balance < money) {
            throw new BalanceInsufficientException("잔고부족: " + (money - balance) + " 모자람");  //사용자 정의 예외 발생
        }                              
        balance -= money;
    }
}
 
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.hs.chap10;
 
public class AccountExample {
 
    public static void main(String[] args) {
        Account account = new Account();
 
        // 예금하기
        account.deposit(10000);
        System.out.println("예금액 : " + account.getBalance());
 
        // 출금하기
        try {
            account.withdraw(30000);
        } catch (BalanceInsufficientException e) {
            String message = e.getMessage();
            System.out.println(message);
            System.out.println();
            e.printStackTrace();
        }
    }
}
 




728x90
반응형
: