[Java] 사용자 정의 exception(class)

Hyo Kyun Lee·2022년 1월 31일
0

Java

목록 보기
28/66

1. 사용자 정의 exception

예외처리를 하는 방식에 대해 java가 제공하는 exception을 사용할 수도 있지만, 사용자가 직접 정의해서 사용하는 exception을 활용할 수도 있다.

이 사용자 정의 exception의 종류는 두가지가 존재한다.

  • Exception class를 상속받아 사용한다(checked exception).
    반드시 오류처리를 해주어야 한다.
  • runtime Exception class를 상속받아 사용한다.
    → 오류처리가 필수는 아니지만, 처리를 해주는 방향으로 작성해주는 것이 좋다.

사용자 정의 exception는 명명을 통해 어떠한 오류를 처리하는지 파악할 수 있기 때문에, 직관성이 높아지는 효과를 얻을 수 있다.

2. 구현방법

아래와 같은 방법으로 구현할 수 있는데, RuntimeException을 상속받은 예외 class이다.
※ RuntimeException은 예외처리를 반드시 해주지 않아도 되는 unchecked exception이다.

  • 기본적으로 class 이름은 어떠한 오류에 대해 처리하는 exception class인지 명기한다.
  • 상속받은 exception class를 설정하여 준다.

2-1. exception 선언(정의)

사용자 exception를 선언하는데, 상속받는 exception class의 부모생성자를 활용하여 오류처리를 한다.

  • 부모생성자에 오류메시지(msg)와 오류객체(ex)를 전달한다.
  • 기본저긍로 BizException은 생성자이므로, 해당 클래스를 호출받으면 생성자가 자동적으로 호출된다.
public class BizException extends RuntimeException{
	public BizException(String msg){
    		super(msg);
        }
     	
        public BizException(Exception ex){
        	super(ex);
        }
}

2-2. 정의한 exception 활용

위에서 정의한 exception에 대해, 특정 exception 상황이 발생하는 예외 상황을 정의하고 처리해준다.

public class BizService{
	public void bizMethod(int i) throws BizException{
    		//전달받은 인자 i가 0보다 작다면
            	//위에서 선언한 exception을 활용하여 예외처리를한다.
                if(i<0){
                throw new BizException("전달받은 인자가 0보다 작습니다.");
        	}
        }
}

위와 같이 특정 상황에 대해 예외처리를 발생하고자 한다면, throw new 구문을 사용한다.
다만 클래스 정의 상에서 예외를 상속받는다면 throws를 사용한다.

2-3. main class에서 exception 활용

public class BizTest{
	public void main(String[] args){
    		BizService biz = new BizService();
                biz.bizMethod(2);
                biz.bizMethod(-5); //인자가 0보다 작으므로 예외상황이 발생
        }
}

인자가 -5 전달되었을때 throw new BizException 구문이 동작하여 예외상황이 발생하게 되고, 기본적으로 인자를 전달한 BizTest 측에서 해당 오류를 처리하게 된다.

checked exception의 경우엔 main class 내에서 해당 오류를 처리하기 위한 try-catch 문을 처리해야 하고, 본 구문은 unchecked 이므로 오류처리가 필수는 아니다.

3. 유의사항

문법적, 구조적 오류가 있는 경우엔 try-catch 구문 활용
문법적, 구조적 오류가 없어도 예외 상황이 발생할 수 있는 경우(위와 같이) if-throw 구문 활용

0개의 댓글