하루하루 살아남기

[Java / 자바 ] 사용자 정의 예외 본문

개발/Java

[Java / 자바 ] 사용자 정의 예외

막막이 2021. 4. 3. 21:09
반응형

Exception클래스는 자바에서 정의한 클래스외에도 사용자가 직접 예외를 정의할 수 있습니다.

방법은 간단합니다 자바의 Exception클래스를 상속받으면 됩니다.

새로운 Exception클래스를 만드는이유는 클래스이름때문입니다.

클래스를 보고 어떤 종류의 에러인지 직관적으로 알수 있게 하기 위함입니다.

 

Exception을 상속받을때 Exception, unChecked Exception을 나눌수 있습니다.

 

Exception클래스를 상속받은 클래스를 Checked Exception이라고 합니다.

에러 처리를 하지 않으면 컴파일 에러가 발생하기 때문에 반드시 에러를 처리해야 하는 Exception을 말합니다.

RuntimeException을 상속받아 정의한 Exception은 에러처리를 하지않아도 컴파일 상에서 에러가 발생하지 않습니다 따라서 unCheckedException입니다. 하지만 에러에 대한 처리는 해주어야 합니다.

 

결재서비스를 만든다고 가정하겠습니다. 결재 과정에서 에러가발생할 경우, 결재 과정에서 발생한 에러라고 해당 메서드를 호출한 쪽으로 알려줘야 합니다. 따라서 PaymentException 이라는 예외를 만들겠습니다. 해당 클래스는 unCheckedException입니다.

 

    public class PaymentException extends RuntimeException {

        public PaymentException(String message) {
            super(message);
        }

        public PaymentException(Exception ex) {
            super(ex);
        }

    }

 

 

해당 클래스는 문자열을 받는 생성자와 예외 타입을 받는 생성자 두개를 가지고 있습니다.

이 예외를 호출할 PaymentService 클래스를 만들어주겠습니다.

 

    public class PaymentService {

        public void paymentMethod(int price) throws PaymentException {
        
                System.out.println("결재 서비스 Start!!!");

                System.out.println("결재 서비스 End!!!");
                
        } 

    }

 

그리고 입력으로받은 금액이 3000원 이하일경우 에러가 발생하게 하겠습니다.

 

    public class PaymentService {

        public void paymentMethod(int price) throws PaymentException {

            System.out.println("결재 서비스 Start!!!");

            if (price < 3000) {
                throw new PaymentException("결재 금액이 이상합니다");
            }

            System.out.println("결재 서비스 End!!!");

        }

    }

 

이제 해당 서비스를 호출해보겠습니다.

 

        public static void main(String[] args) {

            PaymentService payService = new PaymentService();
            payService.paymentMethod(2000);
            payService.paymentMethod(10000);
            System.out.println("모든 결재 종료");

        }

 

 

첫번째 인자로 넣어준값이 2000원이므로 프로그램이 끝까지 실행되지않고 종료됩니다.

그래서 "모든 결재 종료"가 나오지않습니다. unchecked exception이라도 예외 처리가 필요합니다.

 

        public static void main(String[] args) {

            PaymentService payService = new PaymentService();

            payService.paymentMethod(10000);

            try {
                payService.paymentMethod(2000);
            } catch (Exception e) {
                e.printStackTrace();
            }

            System.out.println("모든 결재 종료");

        }

 

 

728x90
반응형

'개발 > Java' 카테고리의 다른 글

[Java / 자바] 람다식  (0) 2021.04.12
[ Java / 자바 ] 함수형 인터페이스  (0) 2021.04.10
[Java / 자바] 예외 발생시키기  (0) 2021.04.03
[Java / 자바] Throws  (0) 2021.04.01
[Java / 자바] 예외처리  (0) 2021.04.01
Comments