1. 개요
이 기사에서는 Java에서 빈 Map 을 초기화하는 다양한 방법을 살펴보겠습니다 .
다양한 방법을 확인하기 위해 Java 8과 Java 9를 사용할 것입니다.
2. 자바 컬렉션 사용하기
Java Collections 모듈에서 제공 하는 emptyMap() 메서드 를 사용하여 빈 맵 을 만들 수 있습니다 . 이렇게 하면 자연적으로 직렬화 할 수 있는 빈 맵 이 형성됩니다. 이 메소드는 Collections Library의 Java 1.5에서 도입되었습니다. 이것은 불변의 Map 을 생성할 것입니다 :
Map<String, String> emptyMap = Collections.emptyMap();
참고: 생성된 Map 는 본질적으로 변경할 수 없기 때문에 사용자가 항목을 추가하거나 Map 에 어떤 유형의 수정도 수행할 수 없습니다 . Map 에서 키-값 쌍을 추가하거나 수정하려고 하면 java.lang.UnsupportedOperationException 이 발생합니다 .
빈 Map 의 생성 및 초기화를 지원하는 메서드가 두 개 더 있습니다 . emptySortedMap() 은 변경할 수 없는 유형 의 빈 SortedMap 을 반환합니다. Sorted Map 은 키에 대한 추가 전체 순서를 제공하는 맵 입니다. 이 메서드로 만든 맵 은 본질적으로 직렬화할 수 있습니다.
SortedMap<String, String> sortedMap = Collections.emptySortedMap();
Java 컬렉션에서 제공하는 다른 메서드 는 빈 NavigableMap 을 반환하는 emptyNavigableMap() 입니다 . 비어 있는 정렬된 Map 과 동일한 속성을 가 집니다. 유일한 차이점은 이 메서드는 탐색 가능한 Map 을 반환한다는 것 입니다. Navigable Map 은 주어진 검색 대상에 대해 가장 가까운 일치 항목을 반환하는 기존의 정렬된 Map 구현 의 확장입니다.
NavigableMap<String, String> navigableMap = Collections.emptyNavigableMap();
위의 모든 메서드 는 본질적으로 변경할 수 없는 Maps 를 반환하며 이러한 Maps 에 새 항목을 추가할 수 없습니다 . 키-값 쌍을 강제로 추가, 삭제 또는 수정하려고 하면 UnsupportedOperationException 이 발생합니다.
3. 생성자를 사용하여 맵 초기화
HashMap, LinkedHashMap, TreeMap 등 다양한 Map 구현 의 생성자를 사용하여 Map 을 초기화할 수 있습니다 . 이러한 모든 초기화 는 필요한 경우 나중에 항목을 추가할 수 있는 빈 맵 을 만듭니다.
Map hashMap = new HashMap();
Map linkedHashMap = new LinkedHashMap();
Map treeMap = new TreeMap();
위의 맵 은 변경 가능하며 이 접근 방식을 사용하는 이점 중 하나인 새 항목을 수락할 수 있습니다. 이 유형의 초기화 중에 생성 된 맵 은 비어 있습니다. 정적 코드 블록 에서 빈 맵 을 정의할 수 있습니다 .
4. Map.of() 를 사용한 Java 9 방식
Java 9에는 Interface Private Methods, Anonymous 클래스, 플랫폼 모듈 시스템 등과 같은 많은 새로운 기능이 함께 제공됩니다 . Map.of () 는 Java 9 버전에서 도입된 팩토리 메서드입니다. 이 메서드는 0개의 매핑을 생성 하는 변경 불가능한 맵 을 반환합니다. 이 메소드에서 제공하는 인터페이스는 Java Collections Framework 아래에 있습니다. Map.of (key1, value1, key2, value2, …..) 는 최대 10개의 키-값 쌍만 가질 수 있습니다.
빈 Map 을 초기화하기 위해 이 메서드에서 키-값 쌍을 전달하지 않습니다.
Map<String, String> emptyMapUsingJava9 = Map.of();
이 팩토리 메서드는 변경 불가능한 Map 을 생성하므로 키-값 쌍을 추가, 삭제 또는 수정할 수 없습니다. UnsupportedOperationException 은 초기화 후 맵 에서 변형을 시도할 때 발생합니다 . 그만큼. 키-값 쌍의 추가 또는 삭제도 지원되지 않으며 위의 예외가 발생합니다.
참고: Java 9 의 Map.of() 메서드는 원하는 키-값 쌍 으로 변경할 수 없는 맵 의 초기화를 단순화 합니다.
5. 구아바 사용
지금까지 핵심 Java를 사용하여 빈 Map 을 초기화하는 다양한 방법을 살펴보았습니다 . 이제 계속 진행 하여 Guava 라이브러리를 사용하여 Map 를 초기화하는 방법을 확인하겠습니다.
Map<String, String> articles = ImmutableMap.of();
위의 방법은 Guava 라이브러리를 사용하여 변경할 수 없는 빈 맵 을 만듭니다.
어떤 경우에는 변경할 수 없는 Map 이 필요하지 않습니다 . Maps 클래스 를 사용하여 변경 가능한 맵 을 초기화할 수 있습니다.
Map<String, String> emptyMap = Maps.newHashMap();
이러한 유형의 초기화는 변경 가능한 Map 을 생성합니다. 즉, 이 Map 에 항목을 추가할 수 있습니다 . 그러나 이 맵 의 기본 초기화 는 비어 있고 항목을 포함하지 않습니다.
특정 키 및 값 유형으로 맵 을 초기화할 수도 있습니다. 이렇게 하면 미리 정의된 요소 유형이 있는 맵 이 생성 되고 따르지 않으면 예외가 발생합니다.
Map genericEmptyMap = Maps.<String, Integer>newHashMap();
즉, 키는 문자열이고 값은 정수인 빈 맵 을 생성합니다. 초기화에 사용되는 한 쌍의 꺾쇠괄호는 Diamond Syntax 로 알려져 있습니다 . 이렇게 하면 Maps 클래스 의 생성자를 호출하는 정의된 형식 인수를 사용하여 Map 이 생성됩니다.
아래 구문을 사용하여 구아바에서 변경 가능한 맵 을 만들 수도 있습니다 .
Map<String, String> emptyMapUsingGuava = Maps.newHashMap(ImmutableMap.of());
결론적으로 위의 방법은 Java에서 빈 Map 을 생성합니다. 본질적으로 변경 가능하므로 이 맵 에 항목을 추가할 수 있습니다 .
ImmutableMap.of() 는 또한 항목이 있는 맵 을 생성하기 위한 메서드 버전을 오버로드 했습니다. 빈 Map 을 만들고 있으므로 오버로드된 메서드를 사용하기 위해 메서드 괄호 안에 매개 변수를 전달할 필요가 없습니다.
7. 결론
이 기사에서는 Empty Map 을 초기화하는 다양한 방법을 살펴보았습니다 . Java 9 이후로 이 분야에서 엄청난 개선이 있었음을 알 수 있습니다 . Maps 를 만들고 초기화 하기 위한 새로운 팩터리 메서드가 있습니다.
항상 그렇듯이 전체 소스 코드는 Github에서 사용할 수 있습니다 .