
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: 동적 수정 가능
- 요구사항에 맞는 적절한 리스트 타입 선택이 중요
단순한 실수였지만, 컬렉션의 특성을 정확히 이해하는 것이 얼마나 중요한지 깨달았습니다.