List.of() 메서드는 Java 9부터 도입되었습니다. 따라서 이 코드는 Java 9 이상에서 사용 가능합니다.

List.of()를 사용하면 불변(immutable) 리스트를 생성할 수 있습니다.

 

불변 객체의 특징 :

  • 안전성: 여러 스레드에서 동시에 접근해도 객체 상태가 변하지 않으므로 동기화가 필요 없습니다.
  • 간단한 사용: 객체가 변경되지 않으므로 예상 가능한 동작을 보장합니다.
//따라서 불변 객체는 요소를 추가, 삭제, 수정할 수 없다. 

List<String> allColors = List.of("Red", "Blue", "Black");

allColors.add("Green");  // UnsupportedOperationException 발생
allColors.remove("Blue");  // UnsupportedOperationException 발생
allColors.set(0, "Yellow");  // UnsupportedOperationException 발생

 

 

변경 가능한 리스트로 사용하려면?

List.of()로 생성된 리스트는 불변이므로, 변경이 필요하다면 ArrayList와 같은 가변 리스트를 사용해야 합니다.

List<String> allColors = new ArrayList<>(List.of("Red", "Blue", "Black"));
allColors.add("Green");  // 이제 요소 추가 가능
allColors.set(0, "Yellow");  // 요소 변경 가능
System.out.println(allColors);  // [Yellow, Blue, Black, Green]

 

출력 형식 :

List<String> colors = List.of("Red", "Blue", "Green");

// for-each 루프를 사용한 순회
for (String color : colors) {
    System.out.println(color);
}

// Iterator를 사용한 순회
Iterator<String> iterator = colors.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

// 람다 
colors.forEach(s-> System.out.println(s));

 

Java 9 이전?

Java 9 이전에는 List.of() 메서드가 없으므로, 리스트를 생성하려면 다른 방법을 사용해야 합니다. 예를 들어, Arrays.asList()를 사용할 수 있습니다.

//Arrays.asList()로 생성된 리스트는 고정 크기 리스트이기 때문에 요소를 추가하거나 제거할 수 없음.
List<String> allColors = Arrays.asList("Red", "Blue", "Black");

 // 요소 수정 가능
 allColors.set(0, "Yellow");  // 0번 인덱스의 "Red"를 "Yellow"로 변경
 // 요소 추가/삭제 불가능
 allColors.add("Purple");  // UnsupportedOperationException 발생
 allColors.remove("Blue"); // UnsupportedOperationException 발생
        
//만약 변경 가능한 리스트가 필요하다면, ArrayList 사용한다. 
List<String> allColors = new ArrayList<>(Arrays.asList("Red", "Blue", "Black"));

// 새로운 요소 추가, 수정, 삭제
allColors.add("Green");
allColors.set(1,"Green");
allColors.remove(1);

 

List.of()와 Arrays.asList() 차이점

  • Arrays.asList(): 리스트의 크기는 고정되지만, 요소는 변경 가능합니다. 다만 요소를 추가하거나 삭제하는 것은 불가능합니다. 이 리스트는 배열과 연결된 리스트입니다.
  • List.of(): 리스트의 크기와 요소가 모두 불변입니다. 요소를 추가, 삭제, 수정할 수 없으며, 이 리스트는 불변 객체로서, 상태 변경이 없습니다.

 

결론 : 

 

Arrays.asList()로 생성된 리스트는 불변 리스트가 아니며, 고정 크기 리스트입니다. 요소의 값을 변경할 수 있지만, 요소를 추가하거나 삭제할 수 없습니다. 반면, List.of()로 생성된 리스트는 불변이고, 요소를 변경할 수 없습니다.

 

+ Recent posts