사용자 정의 예외 클래스
정의
- 사용자가 프로그램에서 특정한 상황이 발생한 경우를 예외로 인식하기 위해 만든 클래스
- 자바에서 제공하지 않는 예외는 사용자가 직접 예외를 만들어서 사용
- 예를 들어, 체크카드로 결제 시에 체크 카드의 잔고가 남아 있지 않는 경우, 예외를 발생시킴
- 일반 예외의 경우 Exception 클래스를 상속받고
- 실행 예외인 경우는 RuntimeException 클래스를 상속 받아서 만듦
특징
- 사용자 정의 예외는 특정한 예외를 처리하기 위한 용도이므로
- 예외가 발생하는 경우에
- 사용자 정의 예외 클래스의 생성자로 예외에 대한 메시지를 전달한 후에
- try/catch문에서 처리하는 게 일반적
- 사용자 정의 예외클래스는 반드시 Exception 클래스를 상속 받아야 함
형식
public class UserDefinedException extends Exception { // Exception클래스 상속
public UserDefinedException() { } // 기본생성자
public UserDefinedException(String mesg) { // 매개변수 있는 생성자
super(mesg);
}
}
예제
1. 사용자 정의 예외 클래스
- 사용자 정의 예외클래스는 반드시 Exception 클래스를 상속 받아야 함
// 사용자 정의 예외클래스는 반드시 Exception 클래스를 상속 받아야 함
class UserDefinedException extends Exception {
public UserDefinedException(String mesg) { // 예외가 발생하면, 생성자로 예외 메시지 전달
super(mesg); // 상위 클래스의 생성자에게 에러메시지 전달
System.out.println("사용자 정의 예외 클래스의 생성자 호출");
}
}
public class ScoreTest {
static int checkScore(int score) throws UserDefinedException {
if(score <= 0 || 100 <= score) {
// 범위를 벗어나는 값을 입력했을 때, 생성자를 이용하여 사용자 정의 예외를 발생
throw new UserDefinedException("정확한 점수를 입력하세요!");
}
return score;
}
public static void main(String[] args) {
int score = -10;
try {
score = checkScore(score);
// 정상적인 값이 입력됐을 때에 아래 출력문이 출력됨
System.out.println("입력한 점수는 " + score + "입니다.");
} catch (UserDefinedException e) {
e.printStackTrace();
}
System.out.println("프로그램 종료! ");
}
}
- throws UserDefinedException
- 예외가 발생하면, 예외를 호출한 곳으로 예외를 떠넘김
- e.printStackTrace();
- 생성자로 보낸 오류 발생 메시지가 출력됨
[ 실행 결과 ]
- checkScore() 메서드를 수행하면, score가 -10이므로 if문 조건의 범위 값을 벗어났기 때문에
- 생성자를 이용 → 사용자 정의 예외 클래스(UserDefinedException)의 객체를 생성하여 예외 발생시킴
- throws UserDefinedExceptio은 예외 발생 시에, 예외를 호출한 곳으로 예외를 다시 넘기라는 뜻이므로
- 예외를 호출했던 checkScore(score)로 가고
- 예외가 발생하였으므로, 아래 출력문("입력한 점수는 ~입니다")는 출력되지 않음
- 이 예외를 catch 블럭이 잡아서 e.printStackTrace() 메서드를 실행함
'JAVA' 카테고리의 다른 글
[JAVA] List 인터페이스(ArrayList, Vecror, LinkedList, Stack) (0) | 2024.04.25 |
---|---|
[JAVA] 컬렉션 프레임워크와 종류 (0) | 2024.04.25 |
[JAVA] throws를 이용하여 예외 처리 (0) | 2024.04.24 |
[JAVA] 예외 처리: 다중 catch문, 사용 시 주의할 점 (0) | 2024.04.24 |
[JAVA] 에러와 예외, 예외의 종류 (0) | 2024.04.24 |