본문 바로가기

Language/Java

사용자 정의 예외

<개요>

예외를 항상 throw new Exception(" 예외 발생 시 하고 싶은 말"); 로 한다면, 마지막 catch 구문에서 할 일이 너무 많다. 

Exception이란 특정적이지 않고 모든 걸 포괄하는 예외에 던졌기 때문에, ()안의 말이 아니면 무슨 이유 땜에 예외가 일어났는지 알기도 쉽지 않다. 

 

따라서 우리가 직접 특정 순간에만 작동하는 예외 클래스를 만들고 그 예외 객체를 이용하여 예외 처리를 할려고 한다. 

public class _06_CustomException {
    public static void main(String[] args) {
        // 사용자 정의 예외
        int age = 17;
        try {
            if(age < 19){
                // System.out.println("만 19세 미만에게는 판매하지 않습니다. ");

                throw new AgeLessThan19Exception("만 19세 미만에게는 판매하지 않습니다.");
            } else {
                System.out.println("주문하신 상품 여기 있습니다.");
            }

        }catch (AgeLessThan19Exception e) {
            System.out.println("조금 더 성장한 뒤에 오세요.");
        } catch (Exception e){
            System.out.println("모든 예외를 처리합니다.");
        }
    }
}

class AgeLessThan19Exception extends Exception {
    public AgeLessThan19Exception(String message) {
        super(message);
    }
}

해당 예제는 19세 미만이 오면 예외를 던지는 구문이다. AgeLessThan19Exception이란 예외 클래스를 만들어서 해당 예외의 객체를 생성했다. 

그리고 AgeLessThan19Exception이 나왔을 때 작동하는 catch 구문을 따로 둬서 해당 예외 상황 발생 시 해야할 행동을 그냥 Exception과 구분했다. 

이는 다른 개발자가 와서 코드를 봐도 가독성이 좋고, 관심사를 다 분리 시켰기에 코드 확장 시 편하다. 

** 스스로 해보기 

package WorkOut_Myself;

public class CustomException_myself {
    public static void main(String[] args) {

        String name = "김판덕";

        try {
            if(name.contains("김")){
                throw new NokimException("김씨 인가요?");
            }
            else {
                System.out.println(" 들어가세요.");
            }
        } catch (NokimException e) {
            e.printStackTrace();
            System.out.println("김씨는 출입 금지 입니다!!");
        }

        catch (Exception e) {
            e.printStackTrace();

        } finally {
            System.out.println("잔치 시작");
        }
    }
}

class NokimException extends Exception {
    public NokimException(String message) {
        super(message);
    }
}

'Language > Java' 카테고리의 다른 글

Thread  (0) 2023.03.09
Throws (예외 처리 미루기)  (0) 2023.03.02
Try with Resources  (0) 2023.02.28
Finally 구문  (0) 2023.02.28
Throw  (0) 2023.02.24