코린이의 소소한 공부노트

사용자 정의 예외 만들기, 예외 되던지기 본문

Java

사용자 정의 예외 만들기, 예외 되던지기

무지맘 2022. 5. 27. 00:19

[사용자 정의 예외 만들기]

1. 조상은 Exception과 RuntimeException 중에서 선택한다.

  - 필요한 경우에만 Exception 클래스를 상속받아 체크드 예외로 만들자.

  - 예외를 선택 처리하는 RuntimeException을 상속받아 언체크드 예외로 만드는 것이 편하다.

2. 보통 예외 메시지가 다 있기 때문에 문자열을 매개변수로 받는 생성자가 필요하다.

// 예시1. 사용자 정의 예외의 기본 틀

class MyException extends Exception{ // 체크드 예외 -> try-catch 필수
    MyException(String msg){ // 문자열을 매개변수로 받는 생성자
        super(msg);	// 조상인 Exception 클래스의 생성자 호출
    }
}

// 예시2. 기본 틀에 에러 코드를 추가한 것

class MyException extends Exception{
    private final int ERR_CODE;
    
    MyException(String msg, int errCode){ // 생성자
        super(msg);
        ERR_CODE = errCode;
    }
    
    MyException(String msg){ // 생성자
        this(msg, 100); // ERR_CODE를 100(기본값)으로 초기화
    }
    
    public int getErrCode(){
        return ERR_CODE;
    }
}

 

 

[예외 되던지기]

1. 예외를 처리한 후 다시 예외를 발생시키는 것으로,

2. 호출한 메서드와 호출된 메서드 양쪽 모두 예외를 처리하게 된다.

class Test {
    public static void main(String[] args) {
        try {
            method();		
        } catch(Exception e) {
            System.out.println("main메서드에서 예외 처리");
        }
    }

    static void method() throws Exception {
        try {
            throw new Exception();
        } catch(Exception e) {
            System.out.println("method1메서드에서 예외 처리");
            throw e; // 다시 예외를 발생시킨다.
        }
    }
}

// 결과
method1메서드에서 예외 처리
main메서드에서 예외 처리

위 코드를 읽었다면 코드가 실행되면서 어떻게 진행되는지 아래 그림처럼 자연스럽게 생각날 것이다.

 

[쿠키글] 알맞은 예외 처리 방식을 어떻게 선택하지?

예외의 종류, 처리 방식은 얼추 다 본 것 같은데, 어떤 상황에 어떤 처리 방식을 쓸지 감이 잡히지 않는다. 그럴 때 아래 예시가 생각보다 도움이 될 수도 있다.

 

엄마가 딸에게 천 원을 주면서 두부를 사 와달라 부탁을 했다. 딸이 그 돈을 받아 가게로 갔더니, 두부가 3천 원인 것이다..!

1. 직접 처리하기(try-catch)

  - 딸이 자기 돈 2천 원을 보태 두부를 사서 집으로 간다.

2. 떠넘기기(예외 선언)

  - 아무것도 사지 않고 집으로 와서 돈이 부족해서 사지 못했다고 하고 천 원을 엄마에게 돌려준다.

3. 분담 처리하기(예외 되던지기)

  - 딸이 천 원을 내고 2천 원을 외상으로 달고 집으로 온다. 후에 엄마가 장 보러 가면서 외상으로 달아둔 2천 원을 갚는다.

 

'Java' 카테고리의 다른 글

Object 클래스와 메서드  (0) 2022.06.16
연결된 예외  (0) 2022.06.10
예외 처리 (2) - 메서드에 예외 선언하기, finally 블록  (0) 2022.05.26
예외의 분류 - 컴파일러 기준  (0) 2022.05.25
예외 발생시키기  (0) 2022.05.25