어제 오늘 내일

[Java] Collections.nCopies() – 같은 값으로 채워진 불변 리스트 만들기 본문

IT/Java

[Java] Collections.nCopies() – 같은 값으로 채워진 불변 리스트 만들기

hi.anna 2025. 9. 12. 02:11

테스트 데이터를 만들거나, 기본값이 반복되는 리스트를 빠르게 생성해야 할 때가 있습니다.
이때 Collections.nCopies() 메서드를 사용하면 아주 간단히 해결할 수 있습니다.
이 메서드는 하나의 값을 N번 반복하는 불변 리스트(읽기 전용 리스트)를 간단히 생성할 수 있습니다.

 

1. 기본 사용법

import java.util.*;

public class NCopiesExample1 {
    public static void main(String[] args) {
        List<String> list = Collections.nCopies(5, "Hello");

        System.out.println(list); // [Hello, Hello, Hello, Hello, Hello]
    }
}

👉 "Hello"라는 값이 5번 반복된 리스트가 만들어집니다.

 

2. 불변 리스트라는 점 주의!

nCopies()로 생성된 리스트는 읽기 전용입니다.
즉, 추가/삭제/수정이 불가능하고, 시도하면 UnsupportedOperationException이 발생합니다.

List<Integer> nums = Collections.nCopies(3, 7);
System.out.println(nums); // [7, 7, 7]

nums.add(10); // 예외 발생! UnsupportedOperationException

👉 안전하게 변경 불가능한 리스트를 만들고 싶을 때 적합합니다.

 

3. 초기값 채우기에 활용하기

테스트 코드에서 자주 쓰입니다.

public class NCopiesExample2 {
    public static void main(String[] args) {
        List<Integer> zeros = Collections.nCopies(10, 0);
        System.out.println(zeros); // [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    }
}

👉 배열이나 보드 게임 상태를 초기화할 때 유용합니다.

 

4. 다른 컬렉션으로 변환하기

nCopies()로 만든 리스트를 그대로 쓸 수도 있지만, 수정 가능한 리스트가 필요하다면 새 리스트로 감싸면 됩니다.

List<String> immutable = Collections.nCopies(4, "X");
List<String> modifiable = new ArrayList<>(immutable);

modifiable.set(0, "O");
System.out.println(modifiable); // [O, X, X, X]

👉 이렇게 하면 초기값은 빠르게 생성하면서도, 자유롭게 수정할 수 있습니다.

 

5. 정리

  • Collections.nCopies(int n, T obj)
    obj를 n번 반복한 불변 리스트 반환
  • 반환된 리스트는 읽기 전용 (add/remove/set 불가)
  • 초기화, 테스트 데이터, 반복 값 세팅할 때 유용
  • 필요하다면 new ArrayList<>(...)로 수정 가능한 리스트로 변환 가능

👉 같은 값으로 채워진 불변 리스트가 필요하다면 Collections.nCopies()를 쓰자!

 

 

반응형
Comments