Java에서 "IllegalStateException"은 메서드가 부적절한 시간 또는 부적절한 상태에서 호출될 때 발생하는 런타임 예외의 한 유형입니다. 즉, 이 예외는 프로그램의 현재 상태에서 호출할 수 없는 메서드가 호출될 때 발생합니다.
다음은 "IllegalStateException" 예외를 발생시킬 수 있는 코드 예시입니다:
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");
for (String item : list) {
if (item.equals("orange")) {
list.remove(item);
}
}
}
}
이 예제에서는 문자열 배열 목록을 생성하고, 여기에 몇 가지 요소를 추가한 다음, 각 루프를 사용해 목록을 반복합니다. 루프 내부에서 현재 요소가 "orange"와 같은지 확인합니다. 만약 그렇다면 "remove" 메서드를 사용하여 목록에서 제거하려고 합니다.
그러나 이 코드는 목록을 반복하는 동안 목록을 수정하고 있기 때문에 "IllegalStateException"을 발생시킵니다. "remove" 메서드는 목록의 구조를 변경하고 iterator를 무효화하므로 반복하는 동안에는 호출할 수 없습니다.
이 문제를 해결하려면 각 루프 대신 iterator를 사용하고 iterator의 "remove" 메서드를 사용하여 요소를 제거할 수 있습니다:
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (item.equals("orange")) {
iterator.remove();
}
}
}
}
이 수정된 코드에서는 iterator를 사용해 목록을 반복하고, 목록 대신 iterator에서 "remove" 메서드를 호출합니다. 이렇게 하면 목록을 반복하는 동안 "IllegalStateException"을 발생시키지 않고 목록에서 요소를 제거할 수 있습니다.
요약하면, "IllegalStateException" 예외는 메서드가 부적절한 상태 또는 부적절한 시간에 호출될 때 발생합니다. Java에서 이 예외는 일반적으로 컬렉션(collection)을 반복하는 동안 컬렉션을 수정할 때 발생합니다. 이 예외를 방지하려면 iterator를 사용하고 컬렉션 대신 iterator에서 "remove" 메서드를 호출해야 합니다.
2023.02.19 - [Java] - 컬렉션(collection)이란?
'Java' 카테고리의 다른 글
컬렉션(collection)이란? (0) | 2023.02.19 |
---|---|
java.lang.ClassCastException 에러 해결 방법 (0) | 2023.02.17 |
java.lang.NullPointerException 해결법 (0) | 2023.02.17 |
댓글