0%

연결된예외

연결된 예외

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

사용이유

  • 여러 예외를 하나로 묶어서 다루기 위함
1
try {
2
  install();
3
} catch(ScpaceException e) {
4
  e.printStackTrace();
5
} catch(MemoryException e) {
6
  e.printStackTrace();
7
} cetch(Exception e) {
8
  e.printStackTrace();
9
}
1
try {
2
  install();
3
} catch(InstallException e) {
4
  e.printStackTrace();
5
} catch(Exception e) {
6
  e.printStackTrace();
7
}
1
void install() throws InstallException {
2
  try {
3
    startInstall();
4
    copyFiles();
5
  } catch (SpaceException e) {
6
    InstallException ie = new InstallException("설치중 예외발생");
7
    ie.initCause(e);
8
    throw ie;
9
  } catch (MemoryException me) {
10
    ......
11
  }
12
}
  • checked예외(필수처리)를 unchecked예외(선택처리)로 변경하려 할 때 사용
1
static void startInstall() throws SpaceException, MemoryException {
2
  if(!enoughSpace())
3
    throw new SpaceException("설치할 공간이 부족합니다.");
4
  if(!enoughMemeory())
5
    throw new MemoryException("메모리가 부족합니다.");
6
}
1
static void startInstall() throws SpaceException {
2
  if(!enoughSpace())
3
    throw new SpaceException("설치할 공간이 부족합니다.")
4
  if(!enoughMemory())
5
    throw new RuntimeException(new MemoryException("메모리가 부족합니다.")); // 원인 예외로 등록
6
}