Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java UnsupportedOperationException 완벽 정리: 발생 원인과 해결 방법


UnsupportedOperationException은 Java에서 RuntimeException의 하위 클래스에 해당하며, 요청된 연산이 해당 객체에서 지원되지 않을 때 발생하는 예외입니다. 이 클래스는 Java Collections Framework(자바 컬렉션 프레임워크)의 멤버로, List, Queue, Set, Map과 같은 대부분의 구체적인 컬렉션 구현체에서 던져질 수 있습니다.

대표적으로 Collections.unmodifiableList()처럼 수정 불가능한 뷰(view) 객체나 고정 크기 리스트(Arrays.asList())에 요소를 추가하거나 삭제하려고 할 때 이 예외가 자주 발생합니다.

구문 (Syntax)

public class UnsupportedOperationException extends RuntimeException

예제 코드

import java.util.*;
public class UnsupportedOperationExceptionTest {
   public static void main(String[] args) {
      List aList = new ArrayList();
      aList.add('a');
      aList.add('b');
      List newList = Collections.unmodifiableList(aList);
      newList.add('c'); // 수정 불가능한 리스트에 추가 시도 → 예외 발생
   }
}

위 예제에서는 Collections.unmodifiableList(aList)를 통해 원본 리스트의 읽기 전용 뷰를 생성한 뒤, 이 뷰 객체에 새로운 요소 'c'를 추가하려고 시도합니다. 읽기 전용 뷰는 변경 연산을 지원하지 않으므로 UnsupportedOperationException이 발생하게 됩니다.

해결 방법: 이러한 예외를 피하려면 뷰 객체가 아닌 원본 컬렉션 객체(aList)를 사용하여 데이터를 수정해야 합니다. 즉, newList.add('c') 대신 aList.add('c')를 호출하면 됩니다.

실행 결과

Exception in thread "main" java.lang.UnsupportedOperationException
  at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055)
     at UnsupportedOperationExceptionTest.main(UnsupportedOperationExceptionTest.java:9)