8-18 연결된 예외

oyeon·2020년 12월 21일
0

Java 개념

목록 보기
8/70

연결된 예외 : 어떤 예외를 다른 예외로 감싸는 것

  • 언제 사용?
  1. 세부적인 사항을 포괄적인 사항으로 포함시킬 때 사용
  2. cheked 예외를 unchecked 예외로 변경시 사용(try-catch문 사용을 줄일 수 있음)
  • 한 예외가 다른 예외를 발생시킬 수 있다.
  • 예외 A가 예외 B를 발생시키면, A는 B의 원인 예외(cause exception)

사용 이유 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 메서드 끝
profile
Enjoy to study

0개의 댓글