반응형

1. Map이란?

Map은 키(key)와 값(value)의 쌍으로 데이터를 저장하는 Java의 인터페이스입니다. 대표적인 Map 구현체에는 다음과 같은 것들이 있습니다.

  • HashMap (가장 많이 사용됨, 빠른 조회 성능)
  • LinkedHashMap (입력 순서를 유지)
  • TreeMap (키를 기준으로 정렬)
  • Hashtable (스레드 안전한 HashMap)

MapCollection 인터페이스를 구현하지 않으며, 키와 값을 한 쌍(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 변환 등 여러 가지가 있습니다. 사용 목적에 맞는 방법을 선택하면 효율적인 코드 작성이 가능합니다.

반응형

+ Recent posts