Java 9에서는 컬렉션 팩토리 메소드(Collection Factory Methods)가 새롭게 도입되었습니다. 팩토리 메소드는 컬렉션의 수정 불가능한(unmodifiable) 인스턴스를 생성하기 위한 특수한 형태의 정적(static) 메소드입니다. 이를 활용하면 소수의 요소만으로 리스트(List), 셋(Set), 맵(Map)을 코드 한 줄로 간결하고 안전하게 생성할 수 있습니다.
List.of()
List.of()는 불변(immutable) 리스트를 편리하게 만들 수 있는 정적 팩토리 메소드입니다. 기존에는 Arrays.asList()나 Collections.unmodifiableList()를 조합해야 했지만, Java 9부터는 훨씬 직관적인 문법으로 리스트를 생성할 수 있습니다.
문법
List.of(elements...)예제
import java.util.List;
public class ListTest {
public static void main(String[] args) {
List<String> list = List.of("item 1", "item 2", "item 3", "item 4", "item 5");
for(String l : list) {
System.out.println(l);
}
}
}실행 결과
item 1
item 2
item 3
item 4
item 5Set.of()
Set.of()는 불변 셋(Set)을 간편하게 생성하는 정적 팩토리 메소드입니다. 셋은 중복 요소를 허용하지 않으므로, 동일한 값을 전달하면 IllegalArgumentException이 발생한다는 점에 유의해야 합니다.
문법
Set.of(elements...)예제
import java.util.Set;
public class SetTest {
public static void main(String[] args) {
Set<String> set = Set.of("Item 1", "Item 2", "Item 3", "Item 4", "Item 5");
for(String s : set) {
System.out.println(s);
}
}
}실행 결과
Item 5
Item 1
Item 2
Item 3
Item 4셋은 순서를 보장하지 않기 때문에 실행 결과의 출력 순서는 입력 순서와 다를 수 있습니다.
Map.of()와 Map.ofEntries()
Map.of()와 Map.ofEntries()는 불변 맵(Map)을 손쉽게 생성할 수 있는 정적 팩토리 메소드입니다. Map.of()는 키-값 쌍을 나열하는 방식이며, 항목이 많거나 가독성을 높이고 싶을 때는 Map.entry()를 사용하는 Map.ofEntries() 방식이 유용합니다.
문법
Map.of(k1, v1, k2, v2)
Map.ofEntries(entry(k1, v1), entry(k2, v2), ...)예제
import java.util.Map;
public class MapTest {
public static void main(String[] args) {
Map<Integer, String> map = Map.of(101, "Raja", 102, "Adithya", 103, "Jai");
for(Map.Entry<Integer, String> m : map.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}
}
}실행 결과
103 Jai
102 Adithya
101 Raja팩토리 메소드 사용 시 주의사항
- 수정 시도 시 예외 발생: 생성된 컬렉션에 요소를 추가, 삭제, 변경하려 하면
UnsupportedOperationException이 발생합니다. - null 허용 안 됨: 모든 팩토리 메소드는
null요소를 허용하지 않으며, 전달 시NullPointerException이 발생합니다. - 중복 금지:
Set.of()는 중복된 값을,Map.of()는 중복된 키를 허용하지 않습니다. - 메모리 효율성: 내부적으로 최적화된 구조를 사용하여 소규모 불변 컬렉션을 효율적으로 저장합니다.
이처럼 Java 9의 컬렉션 팩토리 메소드는 보일러플레이트 코드를 줄이고, 의도치 않은 변경으로부터 데이터를 보호하는 불변 컬렉션을 손쉽게 만들 수 있는 강력한 기능입니다.