Java/기본

[Java] 예외처리103 - 예외강제 발생시키기 & 사용자 정의 예외

coding captain 2021. 6. 20. 20:27

예외강제 발생

컴파일 과정 혹은 실행에는 문제가 없지만 인위적으로 예외 발생시키는 것을 말한다. throw를 사용하여 발생시킨다.

강제로 예외 발생시키는 과정은 과부하를 주기 때문에 자주 사용하지는 않는다. 앞선 포스팅에서 설명하였듯이 throws 를 사용하여 예외객체를 전달하는 이유가 시스템 과부하를 줄이기 위함을 염두에 둔다.

 

참고로 throws 와 throw 는 사용목적이 다르니 용어 확실히 정리해두자

throws 예외객체를 호출한 쪽에 전달하기 위해 사용
throws : 3인칭. 제3자가 처리하도록 던짐
throw 예외를 일부러 발생시키기 위해 사용
throw : 1인칭. 내가 예외를 발생시킴

 

형식

throw new [예외객체];

 

예제

class throwEx {
	public static void main(String[] args){
		throwEx th = new throwEx();
		try{
			th.getWarning(15);
		} catch(Exception e){
			e.printStackTrace();
		}	
	}	
	
    //예외가 발생하면 메서드를 호출한 곳으로 예외객체를 전달함
	void getWarning(int a) throws Exception{		
		if(a > 19){
			System.out.println("입장가능합니다");
		} else{
        	//강제로 예외를 발생시킴
			throw new Exception("미성년자입니다");
		}
	}	
}

 


 

사용자 정의 예외

표준으로 정해진 예외 말고 프로그래머가 직접 예외 클래스를 생성하여 사용하는 것을 말한다.

 

예제

1) Exception 클래스를 상속받아 SelfException 라는 예외 클래스를 생성하였다.

class SelfException extends Exception{
    String msg = "미성년자는 입장불가";
    public selfException(String msg) {
        super(msg);
    }
}

 

2) 새로 생성한 SelfException 의 예외가 발생하도록 인자값을 넣었다.

public class SelfExceptionTest {
    void getWarning(int a) throws selfException{
        if(a > 19){
            System.out.println("입장가능합니다");
        } else{
            throw new selfException("미성년자입니다");
        }
    }

    public static void main(String[] args) {
        SelfExceptionTest st = new SelfExceptionTest();
        try {
            st.getWarning(25);
            st.getWarning(15);		//예외 발생
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}