본문 바로가기

development/Java

Java List.of()로 인한 파일 삭제 실패 해결

 

자바 커피 컵 로고  작가: Icons8


Java 프로젝트에서 임시 파일을 관리하던 중, API 호출 후 일부 파일이 삭제되지 않는 문제가 발생했습니다. 서버 스토리지에 파일이 계속 누적되는 현상을 발견했습니다.

문제 코드

List<File> filesToDelete = List.of(
    imageFile,
    videoFile
);

// UnsupportedOperationException 발생
for (File additionalFile : additionalFiles) {
    filesToDelete.add(additionalFile);  // 예외 발생!
}

원인 분석

List.of()는 불변 리스트를 생성합니다. 생성 후 요소를 추가하려고 하면 UnsupportedOperationException이 발생합니다.

List<String> list = List.of("a", "b");
list.add("c");  // UnsupportedOperationException

해결 방법

// 가변 리스트로 변경
List<File> filesToDelete = new ArrayList<>();

if (imageFile != null) {
    filesToDelete.add(imageFile);
}
if (videoFile != null) {
    filesToDelete.add(videoFile);
}
if (additionalFiles != null) {
    filesToDelete.addAll(additionalFiles);
}

fileManager.deleteFiles(filesToDelete);

테스트 검증

public class ListTest {
    public static void main(String[] args) {
        // List.of() - 불변
        try {
            List<String> immutable = List.of("file1", "file2");
            immutable.add("file3"); // 예외 발생
        } catch (UnsupportedOperationException e) {
            System.out.println("❌ List.of() 수정 불가");
        }
        
        // ArrayList - 가변
        List<String> mutable = new ArrayList<>();
        mutable.add("file1");
        mutable.add("file2");
        System.out.println("✅ ArrayList 수정 가능: " + mutable);
    }
}

핵심 교훈

  • List.of(): 읽기 전용, 수정 불가
  • ArrayList: 동적 수정 가능
  • 요구사항에 맞는 적절한 리스트 타입 선택이 중요

단순한 실수였지만, 컬렉션의 특성을 정확히 이해하는 것이 얼마나 중요한지 깨달았습니다.