본문 바로가기

Java/기본

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

예외강제 발생

컴파일 과정 혹은 실행에는 문제가 없지만 인위적으로 예외 발생시키는 것을 말한다. 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();
        }
    }
}