ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 나만의 예외만들기
    JAVA/예외( exception ) 2023. 6. 15. 18:19
    728x90

    개념

    예외를 처리하기 위한 방법으로 2개의 키워드를 알아야 한다.

    throws : 발생할 수 있는 예외를 등록하는 키워드. 

    throw : 예외가 발생했을 때  예외를 핸들링하지 않으면 해당 메소드를 호출한 곳으로 예외를 보내는 키워드

     

    또한 나만의 예외를 만들기 위해선 새로만든 예외클래스는 Exception을 상속 받아야한다.

     

     

    점수입력하는 프로그램의 예외처리 클래스 만들어 활용하기

    1. 예외처리 클래스 만들기

    // 우리가 만드는 예외 클래스
    // Exception 또는 RuntimeException 클래스를 상속 받아서 만듬
    public class ScoreException extends Exception {
    
    	// 생성자
        public ScoreException(){
            super("점수 입력 오류");  // 부모 클래스의 생성자 호출
            // Exception(String message) 생성자가 호출됨
        }
    
        public ScoreException(String msg){
            super(msg);
        }
    	
    }

    예외를 처리하는 클래스는 1차적으로 Exception을 상속받아 메세지를 전달할 수 있도록 해야한다.

     

    첫번째 생성자로 예외클래스 인스턴스 생성시, "점수입력오류" 라는 메세지를 받아 상속받은 부모의 생성자에 전달한다

     

    두번째 생성자는 내가 직접 메세지(msg)를 받아 해당 메세지로 예외를 발생시키기 위한 생성자이다.

     

     

    2. 점수입력 메서드 만들기

    package com.lec.java.exception07;
    
    import java.util.Scanner;
    
    public class Exception07Main {
    
    	static Scanner sc = new Scanner(System.in);
    	
    	public static int inputScore() throws ScoreException{
    		int score = sc.nextInt();
    
    		if(score < 0 || score > 100){
    //			ScoreException ex = new ScoreException();
    			ScoreException ex = new ScoreException(score + "값은 입력할수 없는 정수 입니다");
    			throw ex;   // 예외 객체를 throw
    		}
    		return score;
    	} // end inputScore()
    	
    	
      }

    여기서 중요한 포인트는 2가지 이다.

    1. 해당 메서드는 throws 키워드로 예외가 발생할 수 있는 메서드임을 표현해주어야 한다.

    2. 예외가 발생했을 시, throw 키워드로 우리가 만든 예외 클래스의 객체를 생성하여 해당 메서드를 호출한 곳으로 예외를 보내주어야 한다.

     

     

    3.  Main 메서드에서 예외 발생을 명시한 inputScore() 메서드 실행하기

    예외 발생시, 예외를 호출한 곳으로 보내주는 throws 키워드를 작성하였기 때문에,

    main 메서드에서는 이를 반드시 exception handling을 해주어야 한다.

     

    방법은 2가지이다.

    1. main 메서드도 예외 발생시 main메서드를 호출한 곳으로 예외를 보내주는 방법

    이 방법은 main 메서드를 호출한 곳에서 예외를 처리해야 하는데,

    main 메서드를 호출한 곳은 바로 JVM이다.

    JVM이 예외를 처리하는 순서는 다음과 같다.

         ① getMessage() 호출

         ② 예외상황이 발생해서 전달되는 과정을 IDE에 출력 (일종의 print)

         ③ 프로그램

    즉, main에서도 예외를 처리하지 않으면 프로그램은 자동으로 죽게 되는 것이다.

     

     

     

    2. main 메서드에서 inputScore()메서드의 예외를 handling하는 방법

    위의 방법처러 try ~ catch ~ finally 방법을 사용하여 예외를 처리하면 프로그램은 마지막 과정까지 수행하게 된다.

    여기서 catch절을 보게 되면, 내가 만든 예외를 받은 것을 확인할 수 있다.

    이유는,

    예외가 발생할 수 있는 메서드에서 throws 키워드로 ScoreException을 던졌기 때문이다.

     

    지금까지 예외발생시 처리하는 방법과  해당 부분에서 예외를 처리하지 않고 호출한 곳으로 예외를 보내주는방법,

    나만의 예외처리 클래스를 만들어 활용하는 방법을 알아보았다.

Designed by Tistory.