연결된 예외
- 한 예외가 다른 예외를 발생시킬 수 있음
- 예외 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 | } |