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()로 생성된 리스트는 불변이고, 요소를 변경할 수 없습니다.
'Java' 카테고리의 다른 글
| Java 빌더 패턴 (Builder Pattern) (0) | 2025.01.29 |
|---|---|
| Java List.of() 객체(Apple)에 담긴 값 선택(filter)하여 꺼내기 (0) | 2025.01.27 |
| JAVA 배열 index값 반환 메서드 (2) | 2025.01.25 |
| JDBC, JPA, MyBatis, jOOQ: 데이터베이스 기술 비교 (0) | 2024.08.10 |
| Java 람다 (0) | 2024.08.10 |