우주먼지
Published 2023. 3. 25. 07:18
Multi Catch Block Languages/Java

💡 멀티 Catch 블럭

JDK 1.7부터 여러개의 catch 블럭을 '|'를 이용해 하나의 catch 블럭으로 합칠 수 있게 되었다.

중복 코드를 줄일 수 있으며, '|' 기호로 연결할 수 있는 예외 클래스의 개수는 제한이 없다.

try {
    ...
} catch (ExceptionA | ExceptionB e) {
    e.printStackTrace();
}

// 상위,  하위 클래스가 | 기호와 같이 있다면 에러가 발생한다.
try {
    ...
} cathc (ParentException | ChildException) { // 에러
    ...
}

멀티 catch 블럭은 하나의 블럭으로 여러 예외를 처리하는 것이기 때문에,
발생한 예외를 처리할 때 실제로 어떤 예외가 발생한 건지 알 수 없다.

 

그래서 참조변수 e로 멀티 catch 블럭에 '|' 기호로 연결된
예외 클래스들의 공통 분모인 부모 예외 클래스에 선언된 멤버만 사용할 수 있다.

 

필요하다면, instanceof로 어떤 예외가 발생할 것인지 확인 후 개별적 처리가 가능하다.

 

하지만 이렇게까지 해가면서 catch 블럭을 합칠 일도 없고,
대부분 코드를 간단히 하는 정도에서 그친다.

 

마지막으로 멀티 catch 블럭에 선언된 참조변수 e는 상수로 변경이 불가능하다는 제약이 있다.

여러 catch 블럭이 하나의 참조변수를 공유하기 때문에 생기는 제약으로 참조변수를 바꿀 일은 없다.

try {
    ...
} catch (ExceptionA | ExceptionB e) {
    e. methodA(); // 에러, ExceptionA에 선언된 methodA()는 호출 불가능

    if (e instanceof Exception A) {
        ExceptionA e1 = (Exception) e;
        e1.methodA(); // OK, ExceptionA에 선언된 메서드 호출 가능
    } else { // ExceptionB 일 경우
        ...
    }
    e.printStackTrace();
}

'Languages > Java' 카테고리의 다른 글

Try-With-Resource  (0) 2023.03.25
Stream 생성  (0) 2023.03.17
Stream  (0) 2023.03.01
Single & Multi Thread  (0) 2023.03.01
Thread  (0) 2023.03.01
profile

우주먼지

@o귤o

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그