Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9 컬렉션 팩토리 메소드 완벽 가이드: List.of(), Set.of(), Map.of() 활용법

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 5

Set.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의 컬렉션 팩토리 메소드는 보일러플레이트 코드를 줄이고, 의도치 않은 변경으로부터 데이터를 보호하는 불변 컬렉션을 손쉽게 만들 수 있는 강력한 기능입니다.