예외3 (Exception)

Mia Lee·2022년 1월 14일
0

JAVA

목록 보기
92/98
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);
	}
	
}


























0개의 댓글