티스토리 뷰

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