안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
자바 표준 API에서 제공하는 예외 클래스만으로는 다양한 종류의 예외를 표현할 수 없습니다 .
예를 들어 은행 입출금을 처리하는 프로그램에서 잔고보다 더 많은 출금 요청이 들어왔을 경우 예외를 발생시킬 필요가 있습니다. 잔고 부족 예외는 자바 표준 API 에는 있지 않습니다.
애플리케이션 서비스와 관련된 예외를 애플리케이션 예외라고 하며
애플리케이션 예외는 개발자가 직접 정의해서 만들어야 하므로 사용자 정의 예외라고 합니다.
사용자 정의 예외 클래스 선언
컴파일러가 체크하는 일반 예외로 선언할 수도 있고,
컴파일러가 체크하지 않는 실행 예외로 선언할 수도 있습니다.
일반 예외로 선언할 경우 Exception을 상속하면 되고
실행 예외로 선언할 경우 RuntimeException을 상속하면 됩니다.
public class XXXException extends [Exception | 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);
}
}
BalanceInsufficientException은 Exception 을 상속하기 때문에 컴파일러에 의해 체크되는 예외가 됩니다. 그래서 소스 작성 시 try - catch 블록으로 예외처리가 필요합니다.
예외 발생시키기
이번에는 사용자 정의 예외 , 자바 표준 예외를 코드에서 발생시키는 방법에 대해 공부하겠습니다.
코드에서 예외를 발생시키는 방법은 아래와 같습니다.
throws new XXXException();
throws new XXXException("메세지");
예외 객체를 생성할 때는 기본 생성자 또는 예외 메시지를 갖는 생성자 중 아무거나 사용해도 상관없습니다. catch 블록에서 예외 메세지가 필요하다면 예외 메세지를 갖는 생성자를 이용해야 합니다.
예외 발생 코드를 가지고 있는 메서드 내부에서 try -catch 블록으로 예외를 처리할 수 있지만 대부분은 자신을 호출한 곳에서 예외를 처리하도록 throws 키워드로 예외를 떠넘깁니다.
public void method() throws XXXException {
throws new XXXException("메세지");
}
그렇기 떄문에 throws 키워드를 포함하고 있는 메서드는 호출할 고에서 아래와 같이 예외 처리를 해주어야 합니다.
try {
method();
} catch(XXXException e) {
//예외 처리
}
예제를 보겠습니다.
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;
}
}
위 예제는 withdraw 메서드애서 balance 필드와 출금액을 비교하여 잔고가 부족하면 BalanceInsufficientException을 발생시키도록 한 예제입니다. 이 예제는 다음 포스팅까지 이어집니다.
'자바' 카테고리의 다른 글
JAVA Object 클래스 객체 비교 equals() (0) | 2017.03.14 |
---|---|
JAVA 자바 예외처리 : 예외 정보 얻기 (0) | 2017.03.13 |
JAVA 자바 예외처리 : 예외 떠넘기기 (0) | 2017.03.13 |
JAVA 자바 예외처리 : 자동 리소스 닫기 (0) | 2017.03.13 |
JAVA 자바 예외처리 : 다중 catch 와 catch 순서 그리고 멀티 catch (0) | 2017.03.13 |