Java/자바 정리

97. 예외가 여러 개여도 하나로 처리하자 – 멀티 캐치(Multi-Catch)

코딩하는냥이 2025. 5. 13. 11:47
반응형

이번 강의에서는 하나의 try 블록에서 여러 종류의 예외가 발생할 수 있을 때,
이들을 하나의 catch 블록에서 동시에 처리하는 방법을 실습해봅니다.
특히 NullPointerException과 NumberFormatException을 함께 묶어 처리하는 구조를 배웁니다.


📌 예제 코드

public class ExceptionHandlingExample {
    public static void main(String[] args) {
        String[] arrays = { "100", "1oo", null, "200" };

        for (int i = 0; i <= arrays.length; i++)  // 배열 범위를 초과하여 인덱스 4 접근 시 예외 발생
            try {
                int value = Integer.parseInt(arrays[i]);  // 문자열을 정수로 변환
                System.out.println("array [" + i + "] : " + value);
            } catch (ArrayIndexOutOfBoundsException e) {
                System.out.println("배열 인덱스 초과 : " + e.getMessage());
            } catch (NullPointerException | NumberFormatException e) {  // 두 예외를 하나의 catch로 처리
                System.out.println("데이터 문제 발견 : " + e.getMessage());
            }
    }
}

💻 실행 결과

array [0] : 100
데이터 문제 발견 : For input string: "1oo"
데이터 문제 발견 : Cannot invoke "String.length()" because "s" is null
array [3] : 200
배열 인덱스 초과 : Index 4 out of bounds for length 4

💬 코드 설명

  • "100" → 정상적인 숫자 변환 → 출력 성공
  • "1oo" → 알파벳 'o' 포함 → NumberFormatException 발생
  • null → 변환 시 NullPointerException 발생
  • "200" → 정상 출력
  • 마지막 반복에서 인덱스 4에 접근 → ArrayIndexOutOfBoundsException 발생

NumberFormatException과 NullPointerException은 같은 처리 방식이기 때문에 하나의 catch 블록으로 묶어 간결하게 처리할 수 있습니다.
이것이 바로 멀티 캐치 문법입니다. | 기호를 사용해 여러 예외 타입을 한 번에 지정할 수 있습니다.


💡 포인트 정리

  • catch (A | B e) 형식으로 여러 예외를 하나의 블록에서 동시에 처리할 수 있습니다.
  • 멀티 캐치는 중복되는 처리 코드를 줄이고 가독성을 높이는 데 유용합니다.
  • 단, 모든 예외가 같은 방식으로 처리될 수 있을 때만 사용하는 것이 좋습니다.
  • |로 묶은 예외 타입들은 상속 관계가 없어야 하며, 같은 변수(e)로 접근해야 합니다.

📌 정리하자면,

멀티 캐치는 여러 예외를 하나의 catch에서 묶어 처리할 수 있도록 도와줍니다.
처리 방식이 같다면 예외마다 블록을 나눌 필요 없이 코드가 더 간결하고 효율적해집니다.