연결된 예외 : 어떤 예외를 다른 예외로 감싸는 것
사용 이유 1 : 여러 예외를 하나로 묶어서 다루기 위해
try {
install();
} catch(InstallException e { // SpaceException과 MemoryException을 하나로 묶음
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
void install() throws InstallException {
try {
startInstall(); // SpaceException 발생
copyFiles();
} catch (SpaceException e) {
InstallException ie = new InstallException("설치 중 예외 발생"); // 예외 생성
ie.initCause(e); // InstallException의 원인 예외를 SpaceException으로 지정
throw ie; // InstallException을 발생시킨다.
} catch (MemoryException me) {
...
}
}
사용 이유 2 : checked 예외를 unchecked 예외로 변경하려 할 때
(예외 선언 필수 -> 예외 선언 선택)
static void startInstall() throws SpaceException, MemoryException {
if(!enoughSpace()) // 충분한 설치 공간이 없는 경우
throw new SpaceException("설치할 공간이 부족합니다.");
if(!enoughMemory()) // 충분한 메모리가 없는 경우
throw new MemoryException("메모리가 부족합니다.");
}
위 코드를 아래와 같이 변경 가능
static void startInstall() throws SpaceException {
if(!enoughSpace()) // 충분한 설치 공간이 없는 경우
throw new SpaceException("설치할 공간이 부족합니다.");
if(!enoughMemory()) // 충분한 메모리가 없는 경우
throw new RuntimeException(new MemoryException("메모리가 부족합니다.")); // 원인 예외로 등록
} // startInstall 메서드 끝