개발공부/JAVA의 정석

[Java] Map.Entry 인터페이스 쉽게 이해하기

기억지기 개발자 2026. 6. 15. 16:55

Map.EntryMap에 저장된 key-value 한 쌍을 표현하는 인터페이스이다.

Map은 데이터를 다음과 같이 저장한다.

Map<String, Integer> map = new HashMap<>();

map.put("사과", 3);
map.put("바나나", 5);
map.put("포도", 2);

이 Map 안에는 다음과 같은 데이터가 들어 있다.

사과 → 3
바나나 → 5
포도 → 2

여기서 "사과" → 3 같은 key-value 한 쌍을 자바에서는 Map.Entry라고 부른다.


왜 Map.Entry가 필요할까?

Map을 순회할 때 key만 필요하다면 keySet()을 사용하면 된다.

for (String key : map.keySet()) {
    System.out.println(key);
}

하지만 key와 value를 둘 다 사용하고 싶다면 보통 value도 꺼내야 한다.

for (String key : map.keySet()) {
    System.out.println(key + " : " + map.get(key));
}

이 방식은 key를 먼저 꺼낸 뒤, 다시 map.get(key)로 value를 조회한다.

 

반면 entrySet()을 사용하면 key와 value를 한 번에 꺼낼 수 있다.

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

출력 결과는 다음과 같다.

사과 : 3
바나나 : 5
포도 : 2

즉, Map.Entry는 Map을 순회하면서 key와 value를 함께 다루기 위해 사용한다.


entrySet()이 반환하는 것

entrySet()의 반환 타입은 다음과 같다.

Set<Map.Entry<K, V>>

조금 어렵게 보이지만 의미는 간단하다.

Map.Entry<K, V>  → key-value 한 쌍
Set<...>         → 그 한 쌍들이 모여 있는 집합

예를 들어 아래 Map이 있다면,

Map<String, Integer> map = new HashMap<>();

map.put("사과", 3);
map.put("바나나", 5);

map.entrySet()은 다음과 비슷한 구조라고 보면 된다.

[
  ("사과", 3),
  ("바나나", 5)
]

그래서 반복문으로 하나씩 꺼낼 수 있다.

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    String key = entry.getKey();
    Integer value = entry.getValue();

    System.out.println(key + " : " + value);
}

Map.Entry의 주요 메서드

getKey() Entry의 key 반환 entry.getKey()
getValue() Entry의 value 반환 entry.getValue()
setValue(V value) Entry의 value 변경 entry.setValue(10)
comparingByKey() key 기준 정렬용 Comparator 반환 Map.Entry.comparingByKey()
comparingByValue() value 기준 정렬용 Comparator 반환 Map.Entry.comparingByValue()

getKey(), getValue() 사용 예시

Map<String, Integer> map = new HashMap<>();

map.put("사과", 3);
map.put("바나나", 5);
map.put("포도", 2);

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    String fruit = entry.getKey();
    int count = entry.getValue();

    System.out.println(fruit + "는 " + count + "개 있습니다.");
}

출력 예시

사과는 3개 있습니다.
바나나는 5개 있습니다.
포도는 2개 있습니다.

setValue() 사용 예시

setValue()를 사용하면 Entry의 value를 변경할 수 있다.

Map<String, Integer> map = new HashMap<>();

map.put("사과", 3);
map.put("바나나", 5);

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    if (entry.getKey().equals("사과")) {
        entry.setValue(10);
    }
}

System.out.println(map);

출력 결과

{사과=10, 바나나=5}

주의할 점은 setValue()는 key를 바꾸는 메서드가 아니라 value만 변경하는 메서드라는 것이다.


comparingByKey() 사용 예시

Map.Entry.comparingByKey()는 key 기준으로 정렬할 때 사용한다.

Map<String, Integer> map = new HashMap<>();

map.put("banana", 5);
map.put("apple", 3);
map.put("grape", 2);

map.entrySet()
   .stream()
   .sorted(Map.Entry.comparingByKey())
   .forEach(entry ->
       System.out.println(entry.getKey() + " : " + entry.getValue())
   );

출력 결과

apple : 3
banana : 5
grape : 2

comparingByValue() 사용 예시

Map.Entry.comparingByValue()는 value 기준으로 정렬할 때 사용한다.

Map<String, Integer> map = new HashMap<>();

map.put("banana", 5);
map.put("apple", 3);
map.put("grape", 2);

map.entrySet()
   .stream()
   .sorted(Map.Entry.comparingByValue())
   .forEach(entry ->
       System.out.println(entry.getKey() + " : " + entry.getValue())
   );

출력 결과

grape : 2
apple : 3
banana : 5

언제 keySet(), values(), entrySet()을 사용할까?

필요한 값사용하는 메서드

key만 필요 keySet()
value만 필요 values()
key와 value 둘 다 필요 entrySet()

예를 들어 key만 출력한다면 다음처럼 작성한다.

for (String key : map.keySet()) {
    System.out.println(key);
}

value만 출력한다면 다음처럼 작성한다.

for (Integer value : map.values()) {
    System.out.println(value);
}

key와 value를 둘 다 출력한다면 다음처럼 작성한다.

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

정리

Map.Entry는 Map에 저장된 key-value 한 쌍을 표현하는 인터페이스이다.

Map을 순회할 때 key와 value를 둘 다 사용해야 한다면 keySet()으로 key를 꺼내고 다시 map.get(key)를 호출하는 것보다 entrySet()을 사용하는 것이 더 자연스럽다.

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

한 줄로 정리하면 다음과 같다.

 

Map.Entry는 Map의 key-value 한 쌍을 다루기 위한 인터페이스이며, key와 value를 함께 순회할 때 entrySet()과 함께 사용한다.