백엔드

[Spring] MultiValueMap이란 무엇일까?

콩지연 2023. 7. 26. 20:52

- 목표

Map과 MultiValueMap을 비교해보고 MultiValueMap에 대해 알아보자!

 

 

- map이란?

1. HashMap의 특징

map의 기본 형식으로, key : value의 한쌍으로 데이터를 저장한다.

여기서 가장 큰 특징은 키가 중복되지 않는다는 것! map에 있는 value값을 조회할 때, 키를 기준으로 가져오기 때문이다.

key를 배열의 인덱스처럼 사용해 데이터(value)값을 가져오기 때문에 시간 복잡도가 O(1)이 된다.

 

 

2. TreeMap의 특징

HashMap과 동일한 기능에 추가 기능이 있는 map이다.

TreeMap은 데이터가 추가될 때마다 key의 값에 따라 자동으로 정렬된다.

 

 

3.LinkedHashMap의 특징

HashMap과 동일한 기능에 추가 기능이 있는 map이다.

LinkedHashMap은 입력순서를 보장한다.

HashMap은 데이터를 저장한 순서대로 출력한다는 보장이 없지만, LinkedHashMap은 순서를 보장한다!

 

 

 

- MultiValueMap이란? 

- MultiValueMap 개념

스프링에서 제공하는 인터페이스로, value값을 List로 감싼 채 map인터페이스 상속받은 인터페이스다.

즉, 하나의 key에 List처럼 하나 이상의 값을 가진 value를 저장할 수 있다는 것이다.

 

 

- 코드로 살펴보자!

//hashMap
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("map",1);
hashMap.put("map",2);
System.out.println("hashMap = " + hashMap);

//MultiValueMap
MultiValueMap<String,Integer> multiValueMap = new LinkedMultiValueMap<>();
multiValueMap.add("map",1);
multiValueMap.add("map",2);
System.out.println("multiValueMap = " + multiValueMap);

//실행결과
hashMap = {map=2}
multiValueMap = {map=[1, 2]}

여기서 코드를 보면, hashmap은 중복이 되지 않기 때문에 key값이 중복되면 덮어쓰게 된다. 그래서 hashmap에서는 마지막에 저장한 2가 map의 value값이 된다.

multiValueMap은 add를 할 때 key값이 중복되면 데이터가 해당 key값에 list로 모두 들어간다. (put도 가능!)

 

 

아래 코드를 보면, map이 key일 때 value값으로 list를 넣는 것도 가능하다!

//list
List<Integer> list = new LinkedList();
list.add(1);
list.add(2);

//MultiValueMap
MultiValueMap<String,Integer> multiValueMap = new LinkedMultiValueMap<>();
multiValueMap.put("map", list);
System.out.println("multiValueMap = " + multiValueMap);

//실행결과
multiValueMap = {map=[1, 2]}

 

- 여기서 잠깐!

여기서 주의할 점(?)은 자바가 아닌 스프링에서 제공하는 인터페이스라는 것!

스프링 프레임워크에 내장된 것이므로 일반 자바 환경에서는 사용할 수 없다. 

 

 

 

 

ヾ(≧ ▽ ≦)ゝ

끝!