Java의 정석_기초편

사용자 정의 예외 만들기 & 예외 되던지기 & 연결된 예외

DJDU 2022. 10. 26. 00:45

사용자 정의 예외 만들기

  1. 조상은 Exception과 RuntimeException 중에서 선택 ⭐️
  2. 문자열을 매개변수로 받는 생성자를 넣어준다. ⭐️
class MyException extends Exception {
    MyException(String msg) { // 문자열을 매개변수로 받는 생성자
        super(msg); // 조상인 Exception클래스를 선택할 수 있다.
    }
}

 

예외 되던지기(exception re-throwing)

  • 예외를 처리한 후에 다시 예외를 발생시키는 것
  • 호출한 메서드와 호출된 메서드 양쪽 모두에서 예외처리하는 것

예제 8-12

Ex8_12 실습하기
더보기
예외 되던지기는 '분담 처리'로 이해하면 된다.

예외 처리 방법

  1. 예외 처리
  2. 예외 떠넘기기
  3. 분담 처리

연결된 예외(chained exception)

  • 한 예외가 다른 예외를 발생시킬 수 있다.
  • 예외A가 예외 B를 발생시키면, A는 B의 원인 예외(cause exception)
  • Throwable initCause(Throwable cause) 지정한 예외를 원인 예외로 등록
  • Throwable getCause() 원인 예외로 반환

 

public class Throwable implements Serializable {
		...
	private Throwable cause = this; // 객체 자신(this)을 원인 예외로 등록
		...
    public synchronized Throwable initCause(Throwable cause) {
        ...
            this.cause = cause; // cause를 원인 예외로 등록
            return this;
    }
}
try {
    startInstall();  // SpaceException 발생
    copyFiles();			
} catch (SpaceException e) {
    InstallException ie = new InstallException("설치중 예외발생"); // 예외 생성
    ie.initCause(e); // InstallException의 원인 예외를 SpaceException으로 지정
    throw ie;        // InstallException을 발생시킨다.
} catch (MemoryException me) {
    ...
}

연결된 예외 사용 이유

  1. 여러 예외를 하나로 묶어서 다루기 위해서
  2. checked예외를 unchecked예외로 변경할 때