본문 바로가기
Java

java.lang.IllegalStateException 오류

by 아도리 2023. 2. 19.

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

댓글