Java/자바 정리

95. 배열 범위도, 숫자 형식도 조심하자 – 예외 두 개를 잡는 try-catch

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

이번 글에는 배열의 범위를 벗어난 접근문자열을 숫자로 바꾸는 과정에서의 오류를 동시에 다루는 예제를 실습해봅니다.
두 가지 서로 다른 예외를 catch 블록을 나눠서 처리하면, 구체적으로 어떤 문제가 발생했는지 알 수 있습니다.


📌 예제 코드

public class ExceptionHandlingExample {
    public static void main(String[] args) {
        String[] arrays = { "100", "1oo" }; // 두 번째 문자열은 알파벳 'o'가 포함되어 있음

        for (int i = 0; i <= arrays.length; i++)  // i <= 배열 길이 → 마지막 반복에서 배열 범위 초과 발생
            try {
                int value = Integer.parseInt(arrays[i]); // 문자열을 정수로 변환
                System.out.println("array [" + i + "] : " + value);
            } catch (ArrayIndexOutOfBoundsException e) {
                System.out.println("배열 인덱스 초과 : " + e.getMessage());
            } catch (NumberFormatException e) {
                System.out.println("숫자가 아님 : " + e.getMessage());
            }
    }
}

💻 실행 결과

array [0] : 100
숫자가 아님 : For input string: "1oo"
배열 인덱스 초과 : Index 2 out of bounds for length 2

💬 코드 설명

  • 배열 "arrays"에는 "100"과 "1oo" 두 개의 문자열이 들어 있습니다.
  • 반복문 조건 i <= arrays.length는 배열의 유효 인덱스 범위(0~1)를 벗어나 2까지 접근하기 때문에 마지막에 ArrayIndexOutOfBoundsException이 발생합니다.
  • "100"은 정상적인 숫자 문자열이므로 변환되어 출력됩니다.
  • "1oo"는 알파벳 'o'가 섞여 있어 숫자로 변환할 수 없고, 이때 NumberFormatException이 발생합니다.
  • 각 예외 상황에 맞는 catch 블록이 동작하며, 정확한 예외 메시지를 출력합니다.

💡 포인트 정리

  • 예외가 여러 종류 발생할 수 있는 코드는 catch 블록을 나눠서 예외별로 대응할 수 있습니다.
  • ArrayIndexOutOfBoundsException은 배열 범위를 벗어난 접근에서 발생합니다.
  • NumberFormatException은 문자열을 숫자로 변환할 수 없는 경우 발생합니다.
  • 적절한 예외 처리로 프로그램을 끊기지 않게 유지하면서, 무엇이 잘못됐는지 명확하게 전달할 수 있습니다.

📌 정리하자면,

하나의 try 블록 안에서 여러 개의 서로 다른 예외가 발생할 수 있다면, 각 예외에 맞는 catch를 분리해서 처리하는 것이 좋습니다.
이렇게 하면 예외의 종류에 따라 더 구체적이고 친절한 메시지를 제공할 수 있어, 디버깅과 사용자 응대에 모두 유리합니다.