Framework/Spring🌱

[Spring] MultiValueMap란?

개발자겨려 2024. 4. 8. 15:43

SpringBoot 강의를 듣는 중  MultiValueMap이라는 인터페이스를 만났다.

MultiValueMap interface

 

MultiValueMap 인터페이스는 자바 API문서에서는 찾아볼 수 없고, 스프링 API문서에서 찾을 수 있다.

자바에 내장된 인터페이스가 아니라 스프링에서 제공하는 인터페이스라는 것을 알 수 있었다.

 

위의 MultiValueMap인터페이스를 보면 Map 인터페이스를 상속 받을 때 Value값을 List로 받는것을 확인할 수 있다.

즉, 하나의 Key와 하나 이상의 Value로 이루어진 리스트를 받는다는 말이다.

// Java의 기존 Map
Map<String, Integer> basicMap = new HashMap<>();
		
// 스프링의 MultiValueMap
MultiValueMap<String,Integer> multiValueMap = new LinkedMultiValueMap<>();
        
basicMap.put("test",1);
basicMap.put("test",2);
		
multiValueMap.add("test",1);
multiValueMap.add("test",2);
		
System.out.println("basicMap = " + basicMap);
		
System.out.println("multiValueMap = " + multiValueMap);
        
//실행결과
//multiValueMap = {test=[1, 2]}
//basicMap = {test=2}

 

일반적인 Map을 구현한 HashMap의 인스턴스인 basicMap은 Key가 중복될 수 없다. 

따라서 마지막으로 put된 basicMap.put("test",2)가 최종적으로 Map에 저장된다.

 

MultiValueMap은 add를 하는 경우에 Key값이 중복되면 해당 Key값에 List로 모두 들어가는 것을 볼 수 있다.

 

MultiValueMap은 아래와 같이 put도 가능하다. (value값에 List를 인자로 한번에 줄 수 있다.)

MultiValueMap<String,Integer> multiValueMap = new LinkedMultiValueMap<>();

// 정수가 담기는 리스트를 생성
List<Integer> intList = new LinkedList<>();

// 리스트에 1,2,3 추가
intList.add(1);
intList.add(2);
intList.add(3);
multiValueMap.put("putTest",intList);
System.out.println("multiValueMap = " + multiValueMap);

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