티스토리 뷰
728x90
반응형
1) 연결된 예외
- 한 예외가 다른 예외를 발생시킬 수 있다.
- 예외 A가 예외 B를 발생시키면 A는 B의 원인예외 (cause exception)
- 문법
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) {
...
- 연결된 예외 사용 이유
- 여러 예외를 하나로 묶어서 다루기 위해
ex. 예시
try {
install();
} catch(SpaceException e) {
e.printStackTrace();
} catch(MemoryException e) {
e.printStackTract();
} catch(Exception e) {
e.printStackTrace();
}
👇를 아래와 같이 변경
InstallException ie = new InstallException("설치중 예외발생"); //예외생성
ie.initCause(e); //InstallException의 원인예외를 SpaceException으로 지정
throw ie; //InstallException을 발생시킴
} catch (MemoryExcpetion me) {
...
- checked예외(필수처리)를 unchecked예외(선택처리)로 변경할 때
ex. 예시
* 필수처리를 선택처리로 변경하고 싶은 경우, 조상 Exception을 RuntimeException으로 바꾸면 되지만 이게 쉽지 않은 경우가 많다.(다른곳에서 이미 Exception이 많이 사용된 경우) 이런 경우엔 RuntimeException을 생성 후, 그 안에 원인예외로 등록하 기 -> 이것이 예외연결하기.
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("메모리가 부족하다"));
//RuntimeException 안에 MemoryException 원인 예외로 넣기 -> 예외연결
} //startInstall메서드 끝
728x90
반응형
'Java > JAVA의 정석' 카테고리의 다른 글
equals() (0) | 2022.11.18 |
---|---|
hashCode() & toString() (0) | 2022.11.18 |
사용자 정의 예외 & 예외 되던지기(exception re-throwing) (0) | 2022.11.15 |
예외 선언 & fianlly 블럭 (0) | 2022.11.15 |
checked 예외 & unchecked 예외 (0) | 2022.11.15 |
댓글
250x250
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday