티스토리 뷰
주의 사항!
- 이 글은 제가 직접 공부하는 중에 작성되고 있습니다.
- 따라서 제가 이해하는 그대로의 내용이 포함됩니다.
- 따라서 이 글은 사실과는 다른 내용이 포함될 수 있습니다.
프로그램을 개발하다 보면 자바 표준 API에서 제공하는 예외 클래스만으로는 다양한 종류의 예외를 표현할 수 없습니다. 예를 들어 은행 업무를 처리하는 프로그램에서 잔고보다 더 많은 출금 요청이 들어왔을 경우 오류가 되며, 프로그램은 잔고 부족 예외를 발생시킬 필요가 있습니다. 그러나 잔고 부족 예외는 자바 표준 API에는 존재하지 않습니다. 잔고 부족 예외와 같이 애플리케이션 서비스와 관련된 예외를 애플리케이션 예외(Application Exception)라고 합니다. 애플리케이션 예외는 개발자가 직접 정의해서 만들어야 하므로 사용자 정의 예외라고도 합니다.
사용자 정의 예외 클래스 선언
사용자 정의 예외 클래스는 컴파일러가 체크하는 일반 예외로 선언할 수도 있고, 컴파일러가 체크하지 않는 실행 예외로 선언할 수도 있습니다. 일반 예외로 선언할 경우 Exception을 상속하면 되고, 실행 예외로 선언할 경우에는 RuntimeException을 상속하면 됩니다.
public class XXXException extends Exception {
public XXXException() {}
public XXXException(String message) {
super(message);
}
}
public class XXXException extends RuntimeException {
public XXXException() {}
public XXXException(String message) {
super(message);
}
}
사용자 정의 예외 클래스 이름은 Exception으로 끝나는 것이 좋습니다. 사용자 정의 예외 클래스도 필드, 생성자, 메서드 선언들을 포함할 수 있지만 대부분 생성자 선언만을 포함합니다. 생성자는 두 개를 선언하는 것이 일반적인데, 하나는 매개 변수가 없는 기본 생성자이고, 다른 하나는 예외 발생 원인(예외 메시지)을 전달하기 위해 String 타입의 매개 변수를 갖는 생성자입니다. String 타입의 매개 변수를 갖는 생성자는 상위 클래스의 생성자를 호출하여 예외 메시지를 넘겨줍니다. 예외 메시지의 용도는 catch {} 블록의 예외 처리 코드에서 이용하기 위함입니다.
다음은 잔고 부족 예외를 사용자 정의 예외 클래스로 선언한 것입니다.
public class BalanceInsufficientException extends Exception {
public BalanceInsufficientException() {}
public BalanceInsufficientException(String message) {
super(message);
}
}
예외 발생시키기
코드에서 예외를 발생시키는 방법은 다음과 같습니다.
throw new XXXException();
throw new XXXException("메시지");
예외 객체를 생성할 때는 기본 생성자 또는 예외 메시지를 갖는 생성자 중 어떤 것을 사용해도 됩니다. 만약 catch 블록에서 예외 메시지가 필요하다면 예외 메시지를 갖는 생성자를 이용해야 합니다. 예외 발생 코드를 가지고 있는 메서드는 내부에서 try - catch 블록으로 예외를 처리할 수 있지만, 대부분은 자신을 호출한 곳에서 예외를 처리하도록 throws 키워드로 떠넘깁니다.
public void method() throws XXXException {
throw new XXXException("메시지");
}
다음 예제는 은행 계좌(Account) 클래스를 작성한 것입니다. 출금(withdraw) 메서드에서 잔고(balance) 필드와 출금액을 비교해서 잔고가 부족하면 BalanceInsufficientException을 발생시킵니다.
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) + " 모자람");
}
blance -= money;
}
}
'공부 일지 > JAVA 공부 일지' 카테고리의 다른 글
자바, API 도큐먼트 (0) | 2021.04.13 |
---|---|
자바, 예외 정보 얻기 (0) | 2021.04.13 |
자바, 예외 떠넘기기 (0) | 2021.04.13 |
자바, 자동 리소스 닫기 (0) | 2021.04.13 |
자바, 예외 처리 코드 (0) | 2021.04.13 |