사용자 정의 Exception

준우·2022년 4월 26일
0

Java

목록 보기
10/30
post-thumbnail
post-custom-banner

😳 그게 뭐야?

Exception 클래스는 자바에서 만들어진 걸 쓸 수도 있지만
사용자가 직접 정의하여 쓰는 방법도 있다.

public class 클래스이름 extends Exception{
	...
}

위 코드 처럼 Exception 이나 RuntimeException 이라는 클래스를
상속 받아서 새로운 Exception 클래스를 만드는 것이다.

✏️ 사용 목적

사용자 정의 Exception을 사용하는 이유는,
클래스의 이름만 봐도 직관적으로 어떤 오류가 발생했는지 알리는 목적이다.

🏃‍♂️ Runtime Exception

Exception을 상속받은 클래스들은 Checked Exception이라고 한다.
이들은 오류 처리를 하지않으면 컴파일 오류가 발생하므로 반드시 오류 처리를 해야한다.

그런데 Runtime Exception을 상속받은 클래스들은
unCheckedException이라고 하며,
오류처리를 하지 않아도 컴파일에서 오류가 발생되지는 않는다.
하지만 모든 예외 상황에 대해 적절하게 처리하는 것이 더욱 안정적이다.

👩‍💻 사용 예시

만약 특정 업무와 관련된 기능을 가진 메소드가 있다고 하자.

이 메소드를 실행할 때 오류가 발생하는 경우,
메소드를 호출한 쪽에 특정 업무에 대한 오류가 발생했다고 알려야할 것이다.

그러기 위해서 TaskException 라는 사용자 정의 Exception을 만들어보자.
RuntimeException을 상속받아 unCheckedException을 정의해주었다.

    public class TaskException extends RuntimeException {
        public TaskException(String msg){
            super(msg);
        }       
        public TaskException(Exception ex){
            super(ex);
        }
    }

어떤 오류가 발생했는지 부모 생성자에게 문자열로 된 오류 메시지를 전달해주기 위해서
부모 생성자를 호출하는 super 메소드에 String 매개변수를 넘기는 생성자와,
실제 발생할 Exception을 담는 목적의 생성자를 만든 것이다.

이미 부모 클래스가 같은 기능을 하는 생성자를 가지고 있기 때문에
사용자 정의 Exception 에서는 별도로 구현할 것은 없고
부모 생성자에게 전달받은 값만 보내주는 것이다.

이런 예외 클래스(TaskException)로 관리될 업무 처리 메소드는
throws 를 사용해 아래와 같이 구현할 수 있다.

    public class SomeService {
        public void taskMethod(int i)throws TaskException{
            System.out.println("업무 처리 로직이 시작합니다.");
            if(i < 0){
                throw new TaskException("매개변수 i는 0보다 같거나 커야합니다.");
            }
            System.out.println("업무 처리 로직이 종료됩니다.");
        }
    }

그리고 이 someService를 이용하는 클래스를 만든다면
try-catch 를 이용해 아래와 같이 구현하여 사용할 수 있다.

    public class taskTest  {  
        public static void main(String[] args) {
            someService task = new someService();
            task.taskMethod(5);
            try{
                biz.taskMethod(-3);
            }catch(Exception ex){
                ex.printStackTrace();
            }
        }
    }

🙏 Reference

post-custom-banner

2개의 댓글

comment-user-thumbnail
2022년 4월 30일

사용 예시가 직관적이네요! 공유해주셔서 감사합니다!

1개의 답글