CH8-18 연결된 예외

[자바의 정석 - 기초편] ch8-18 연결된예외

연결된 예외(Chained Exception)에 대해 배워보자

한 예외는 다른 예외를 발생시킬 수 있다. 예외 A가 예외 B를 발생시키면 A는 B의 원인 예외(Cuse exception)라고 한다.

예외 객체들을 연결시켜주는 클래스가 있다. Throwable이라는 클래스임. 이녀석을 기억하는가?

Untitled

바로 이 모든 오류클래스의 조상클래스다… 여기에 initCause()라는 메서드와 getCause()라는 메서드가 있다.

각각 원인예외로 등록하는 메서드, 원인 예외를 반환하는 메서드이다.

Untitled

Throwable클래스에는 원인예외를 저장할 수 있는 필드가 있다. 초기값은 자기 자신(Throwable클래스)를 원인예외로 등록하게끔 되어있음.

연결된 예외는 예외안에 또다른 예외를 포함시키는 과정이다.

예를 들어 프로그램을 설치하는 메서드를 생각해보자.

Untitled

SpaceException이라는 저장공간 부족할때 생기는 예외가 발생했을때, 새로운 예외 클래스(InstallException ;참조변수ie)를 만들고, ie에 원래 발생한 예외(e)를 원인예외로 포함시켜준다.

이때 이 두 예외를 각각 연결된 예외라고 한다.

위의 코드를 보면, 발생한 원인 예외를 catch로 처리하는 것 처럼 보이지만 catch문 내부를 보면 원인 예외를 새로운 예외클래스에 포함시키면서, 그 새로운 예외클래스를 다시 발생(throw)하는 식으로 catch문이 진행되고 있다. 즉, 발생한 원인예외는 완전히 처리된게 아니다. 연결된 예외까지 완전히 처리해줘야 함.

왜 연결된 예외를 사용하는가?