프로그래밍 스티치

멀티 catch 블럭 본문

JAVA/예외처리

멀티 catch 블럭

프로그래밍 스티치 2022. 2. 8. 12:42
멀티 catch 블럭

JDK1.7부터 여러 catch블럭을 '|'기호를 이용해서, 하나의 catch블럭으로 합칠 수 있게 되었으며, 이를 '멀티 catch블럭'이라 한다. '멀티 catch블럭'을 이용하면 중복된 코드를 줄일수 있으며, '|'기호로 연결할 수 있는 예외 클래스의 개수에는 제한이 없다.

try {
//
// } catch (ParentException | ChildException e) { //에러발생!
} catch (ParentException e) { //이렇게 불필요한 부분을 제거
	e.printStackTrace();
}

주의할점! 멀티 catch블럭의 '|'기호로 연결된 예외 클래스가 조상과 자손의 관계에 있다면 컴파일 에러가 발생한다.

두 예외 클래스가 조상과 자손의 관계에 있다면 그냥 조상클래스만 써주는 것과 똑같기 때문이다. 불필요한 코드를 제거하라는 뜻에서 에러가 발생!

 

try{

} catch ( ExceptionA | Exception B e) {
	e.methodA(); //에러 왜냐면 methodA는 ExceptionA에 선언되어있다고 가정
    
    if(e instanceof ExceptionA) {
    	ExceptionA e1 = (ExceptionA)e;
        e1.methodA(); //OK. ExceptionA에 선언된 메서드 호출 가능
    } else {

주의할점2 ! 멀티 catch는 하나의 catch블럭으로 여러 예외를 처리하는 것이기 때문에, 발생한 예외를 멀티 catch블럭으로 처리하게 되었을 때, 멀티 catch블럭 내에서는 실제로 어떤 예외가 발생한 것인지 알 수 없다. 그래서 참조변수 e로 멀티 catch블럭에 '|'기호로 연결된 예외 클래스들의 공통 분모인 조상 예외 클래스에 선언된 멤버만 사용 할 수있다.

 

즉 공통 멤버만 사용가능!

'JAVA > 예외처리' 카테고리의 다른 글

finally블럭  (0) 2022.02.09
메서드에 예외 선언하기  (0) 2022.02.08
예외 발생시키기  (0) 2022.02.08
try-catch문에서의 흐름  (0) 2022.02.08
예외처리(exception handling)  (0) 2022.02.08