반응형
이번 글에는 배열의 범위를 벗어난 접근과 문자열을 숫자로 바꾸는 과정에서의 오류를 동시에 다루는 예제를 실습해봅니다.
두 가지 서로 다른 예외를 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를 분리해서 처리하는 것이 좋습니다.
이렇게 하면 예외의 종류에 따라 더 구체적이고 친절한 메시지를 제공할 수 있어, 디버깅과 사용자 응대에 모두 유리합니다.
'Java > 자바 정리' 카테고리의 다른 글
98. 예외를 던진다? throws로 책임을 미루는 방법 (0) | 2025.05.13 |
---|---|
97. 예외가 여러 개여도 하나로 처리하자 – 멀티 캐치(Multi-Catch) (0) | 2025.05.13 |
96. 예외 처리에도 순서가 있다! – Exception은 맨 마지막에 써야 해요 (0) | 2025.05.13 |
94. 클래스를 찾을 수 없다면? ClassNotFoundException을 잡아보자 (0) | 2025.05.13 |
93. try-catch로 예외를 안전하게 처리해보자 (0) | 2025.05.13 |
92. 예외 처리의 시작 – NullPointerException은 왜 터질까? (0) | 2025.05.13 |