1. Map
이란?
Map
은 키(key
)와 값(value
)의 쌍으로 데이터를 저장하는 Java의 인터페이스입니다. 대표적인 Map
구현체에는 다음과 같은 것들이 있습니다.
HashMap
(가장 많이 사용됨, 빠른 조회 성능)LinkedHashMap
(입력 순서를 유지)TreeMap
(키를 기준으로 정렬)Hashtable
(스레드 안전한HashMap
)
Map
은 Collection
인터페이스를 구현하지 않으며, 키와 값을 한 쌍(Entry<K, V>
)으로 관리합니다.
2. Map
의 기본적인 데이터 저장
먼저 Map
에 데이터를 저장하는 방법부터 알아보겠습니다.
import java.util.HashMap;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
// HashMap 생성
Map<String, Integer> map = new HashMap<>();
// 데이터 추가
map.put("Apple", 100);
map.put("Banana", 150);
map.put("Cherry", 200);
// Map 출력
System.out.println(map);
}
}
위 코드를 실행하면 다음과 같은 형태로 출력됩니다.
{Apple=100, Banana=150, Cherry=200}
이제 Map
의 데이터를 개별적으로 접근하는 다양한 방법을 알아보겠습니다.
3. Map
데이터를 출력하는 여러 가지 방법
3.1 for-each
루프와 entrySet()
Map
을 출력하는 가장 기본적인 방법은 entrySet()
을 이용하여 for-each
루프를 도는 것입니다.
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
출력 결과:
Key: Apple, Value: 100
Key: Banana, Value: 150
Key: Cherry, Value: 200
이 방식은 Map.Entry<K, V>
객체를 사용하여 getKey()
와 getValue()
로 각각 키와 값을 가져옵니다.
3.2 keySet()
을 활용한 반복
keySet()
을 사용하면 Map
의 키를 Set
으로 가져올 수 있으며, 이를 기반으로 값을 조회할 수 있습니다.
for (String key : map.keySet()) {
System.out.println("Key: " + key + ", Value: " + map.get(key));
}
출력 결과는 위와 동일합니다.
그러나 get(key)
호출이 추가적으로 발생하므로 성능 면에서 entrySet()
을 사용하는 것이 더 효율적입니다.
3.3 values()
를 활용한 값 출력
values()
를 사용하면 Map
에 저장된 모든 값들을 출력할 수 있습니다.
for (Integer value : map.values()) {
System.out.println("Value: " + value);
}
출력 결과:
Value: 100
Value: 150
Value: 200
이 방식은 키 없이 값만 출력할 때 유용합니다.
3.4 Iterator
를 사용한 반복
Iterator
를 활용하면 while
루프를 이용하여 Map
을 순회할 수 있습니다.
import java.util.Iterator;
import java.util.Map;
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, Integer> entry = iterator.next();
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
3.5 Java 8 forEach()
사용
Java 8 이상에서는 forEach()
를 활용하여 더욱 간결한 코드로 데이터를 출력할 수 있습니다.
map.forEach((key, value) -> System.out.println("Key: " + key + ", Value: " + value));
출력 결과:
Key: Apple, Value: 100
Key: Banana, Value: 150
Key: Cherry, Value: 200
이 방식은 코드가 간결하고 가독성이 높아 현대적인 Java 개발에서 자주 사용됩니다.
3.6 Stream API
를 활용한 출력
스트림을 활용하면 Map
을 다양한 방식으로 가공하여 출력할 수 있습니다.
map.entrySet()
.stream()
.forEach(entry -> System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue()));
또한 특정 조건을 적용하여 필터링할 수도 있습니다.
map.entrySet()
.stream()
.filter(entry -> entry.getValue() > 120)
.forEach(entry -> System.out.println("Filtered Key: " + entry.getKey() + ", Value: " + entry.getValue()));
출력 결과:
Filtered Key: Banana, Value: 150
Filtered Key: Cherry, Value: 200
4. 다양한 Map
구현체 출력
각 Map
의 특징을 반영한 출력 방식도 고려할 수 있습니다.
4.1 LinkedHashMap
(입력 순서 유지)
import java.util.LinkedHashMap;
import java.util.Map;
Map<String, Integer> linkedMap = new LinkedHashMap<>();
linkedMap.put("Orange", 50);
linkedMap.put("Grape", 120);
linkedMap.put("Peach", 180);
linkedMap.forEach((key, value) -> System.out.println(key + ": " + value));
4.2 TreeMap
(정렬된 출력)
import java.util.TreeMap;
import java.util.Map;
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Mango", 220);
treeMap.put("Apple", 100);
treeMap.put("Banana", 150);
treeMap.forEach((key, value) -> System.out.println(key + ": " + value));
출력 결과 (알파벳 순서 정렬):
Apple: 100
Banana: 150
Mango: 220
5. JSON 형식으로 출력
Java에서 Map
을 JSON 형식으로 변환하여 출력할 수도 있습니다. 이를 위해 Jackson
라이브러리를 활용할 수 있습니다.
import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(map);
System.out.println(json);
출력 결과:
{"Apple":100,"Banana":150,"Cherry":200}
6. 결론
Map
의 데이터를 출력하는 방법에는 for-each
, Iterator
, forEach()
, Stream API
, 그리고 JSON
변환 등 여러 가지가 있습니다. 사용 목적에 맞는 방법을 선택하면 효율적인 코드 작성이 가능합니다.
'개발 > JAVA' 카테고리의 다른 글
Java에서 String변수가 String[]에 포함되어 있는지 확인 (0) | 2025.04.01 |
---|---|
poi에서 A파일 sheet에 B파일 sheet 복사하기 (0) | 2025.03.04 |
Java에서 사용되는 연산자의 종류와 사용법 완벽 가이드 (0) | 2025.01.26 |
Java에서 형변환(Casting)의 모든 것: 기본형부터 참조형까지 (1) | 2025.01.26 |
Java의 `extends`와 `implements` 이해하기: 상속과 인터페이스 완벽 가이드 (1) | 2025.01.25 |