기본적인 Map의 개념
Java에서 Map 인터페이스는 키-값 쌍을 저장하는 데 사용되는 자료구조입니다. Map은 인터페이스이기 때문에 직접 인스턴스화할 수 없으며, 대신 여러 구현체를 사용할 수 있습니다. 각 구현체는 서로 다른 특성을 가지고 있어, 사용 목적에 따라 적합한 구현체를 선택할 수 있습니다.
주요 Map 구현체:
- HashMap: 가장 일반적인 Map 구현체입니다. 키-값 쌍을 해시 테이블에 저장합니다. 키의 순서를 보장하지 않으며, null 키와 null 값을 허용합니다. 평균적으로 get과 put 연산은 O(1)의 시간 복잡도를 가집니다.
- LinkedHashMap: HashMap과 유사하지만, 삽입된 순서 또는 접근된 순서를 유지합니다. 이러한 특성 때문에 순회시 HashMap보다 약간 느릴 수 있습니다.
- TreeMap: 레드-블랙 트리를 기반으로 하는 Map 구현체입니다. 키에 대해 자연 순서 또는 Comparator에 의해 정의된 순서를 유지합니다. get, put, remove 연산은 O(log n)의 시간 복잡도를 가집니다.
- Hashtable: HashMap과 유사하지만 동기화됩니다. 멀티스레드 환경에서 안전하지만, 대부분의 상황에서는 Collections.synchronizedMap 또는 ConcurrentHashMap을 사용하는 것이 더 좋은 선택일 수 있습니다.
Map<KeyType, ValueType> map = new HashMap<>(); // HashMap 인스턴스 생성
map.put(key, value); // 키-값 쌍 추가
ValueType value = map.get(key); // 키를 사용하여 값 검색
map.remove(key); // 키-값 쌍 제거
boolean containsKey = map.containsKey(key); // 키 포함 여부 확인
boolean containsValue = map.containsValue(value); // 값 포함 여부 확인
int size = map.size(); // Map에 저장된 요소의 수
boolean isEmpty = map.isEmpty(); // Map이 비어있는지 확인
// Map 순회
for (Map.Entry<KeyType, ValueType> entry : map.entrySet()) {
KeyType key = entry.getKey();
ValueType value = entry.getValue();
// 키와 값 사용
}
// 키 또는 값만 순회
for (KeyType key : map.keySet()) {
// 키 사용
}
for (ValueType value : map.values()) {
// 값 사용
}
map.clear(); // 모든 요소 제거
기본적인 map의 사용법
출처 : GPT
맵을 사용해 뷰에서 값을 컨트롤러로 받아와 바인딩 시킬 수 있다.
@Controller
public class MyController {
@PostMapping("/submitData")
public ModelAndView submitData(@RequestParam Map<String, String> dataMap) {
// 데이터 처리 로직
myService.processData(dataMap); // 서비스 레이어 호출
ModelAndView modelAndView = new ModelAndView("resultPage");
modelAndView.addObject("data", dataMap);
return modelAndView;
}
}
예를들어 뷰에서 name="age" value="12" 라고 되어 있는 요소를 전송하면 서버 컨트롤러에서
{ "age" : "12" }
라는 데이터가 map 객체에 자동으로 바인딩 된다.
이렇게 바인딩된 map 객체의 이름은 result 라고 한다면, 이 객체 result을 서비스로 보내 마이바티스 등의 매퍼에 파라미터로 보내 결과를 받아올 수 있다. 이 때에 마이바티스 XML 파일에서 파라미터의 값을 #{age}로 적어주면 age에 저장되어 있는 값이 자동으로 바인딩 된다.
예를들어
SELECT NAME, AGE
FROM HUMAN
WHERE AGE = #{age}
라는 쿼리문이 작성되어 있다면 위 경우 result에 저장된 age의 key 값을 자동으로 바인댕해 12가 입력 된다.
'Java' 카테고리의 다른 글
requestBody와 responseBody(보완예정) (0) | 2023.11.17 |
---|