package ex_exception;
public class Ex1 {
public static void main(String[] args) {
/*
* 사용자 정의 예외 발생
*
* < 기본 문법 >
* 예외가 발생해야하는 위치에서 다음 코드를 기술
* throw new 예외클래스명("예외메세지");
* => 예외클래스명에 해당하는 예외 객체가 생성되며 예외가 발생함
* 해당 객체의 메세지를 e.getMessage()로 리턴받아 확인하거나
* e.printStackTrace() 메서드를 호출하여 확인할 수 있다!
*
*/
int score = 195; // 학점 계산
try {
grade(score); // grade() 메서드로부터 사용자 정의 예외가 Exception 타입으로 위임됨
// => try ~ catch 문을 통해 예외를 처리해야함!
} catch (Exception e) {
// 정상범위가 아닌 점수가 입력되면 Exception 타입 예외가 발생하고
// 해당 예외가 발생했을 때 수행할 작업을 catch 블록에서 기술
// System.out.println("점수 입력 오류! " + score);
System.out.println(e.getMessage() + score);
}
}
// 학점 계산을 위한 점수 score를 전달받아 학점을 출력하는 grade() 메서드 정의
public static void grade(int score) throws Exception {
// 실제 점수의 범위가 0 ~ 100 사이이므로 그 외의 점수는 정상적인 입력이 아님
// 따라서, 별도로 if문 등의 조건식을 통해 정상범위와 비정상범위 판별!
// (int형 파라미터의 범위가 -21억 ~ +21억이므로 0 ~ 100 사이가 아니어도 문법 오류 X)
// => 만약, 외부에서 grade() 메서드를 호출하는 시점에서
// 0 ~ 100사이 범위의 점수가 아닐 때를 대비해서 예외를 처리할 수 있도록
// 개발자가 직접 예외를 발생시킬 수 있다!
if (score < 0 || score > 100) {
// System.out.println("점수 입력 오류!");
// 개발자에 의해 직접 예외를 발생시키려면
// 예외 발생 코드를 조건문을 통해 판별 후 해당 조건문 내에서
// throw 키워드를 사용하여 예외클래스타입 객체를 생성하여 던져야함
// => 예외 클래스 객체의 파라미터에 예외 메세지를 전달 가능
// 1) 예외를 위임하는 경우(주로 사용)
// throw new ArithmeticException("점수 입력 오류!"); // 컴파일에러 발생 없음
throw new Exception("점수 입력 오류!"); // 컴파일에러 발생!
}
}
}
package ex_exception;
public class Ex2 {
public static void main(String[] args) {
/*
* 사용자 정의 예외 클래스
*
* < 기본 정의 문법 >
* class 사용자정의예외클래스명 extends 예외클래스명 {
* 생성자() {
* super("예외메세지");
*
* }
*
* }
*
*/
int score = 195;
// 1. 기존에 존재하는 예외클래스를 활용하는 경우
try {
grade(score);
} catch (Exception e) {
// System.out.println(e.getMessage());
System.out.println("점수를 다시 입력하세요!");
}
System.out.println("==================================");
// 2. 사용자 정의 예외클래스를 활용하는 경우
// => 1번에 비해 예외를 추측하기가 쉽다 = 예외클래스 이름이 직관적이기 때문
try {
grade2(score);
} catch (InvalidScoreInputException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
// 1. 기존에 존재하는 예외클래스를 활용하는 경우
public static void grade(int score) throws Exception {
if (score < 0 || score > 100) {
// 예외가 발생하는 상황
throw new Exception("점수 입력 오류! " + score);
}
}
// 2. 사용자 정의 예외클래스를 활용하는 경우
public static void grade2(int score) throws InvalidScoreInputException {
if (score < 0 || score > 100) {
// 예외가 발생하는 상황
// => 사용자 정의 예외클래스의 객체를 던짐
throw new InvalidScoreInputException("점수 입력 오류! " + score);
}
}
}
// 사용자 정의 예외 클래스 정의 => Exception 클래스를 상속
class InvalidScoreInputException extends ArithmeticException {
// 슈퍼클래스인 Exception 클래스의 생성자를 통해 자동 생성
public InvalidScoreInputException(String message) {
// 메세지를 입력받아 슈퍼클래스의 생성자에 전달하면 예외메세지 초기화 가능!
super(message);
}
}