[Java] Map과 Entry의 관계

artp·2025년 3월 11일

java

목록 보기
23/32
post-thumbnail

Map과 Entry의 관계 이해하기

Java에서 Map과 Entry의 관계는 많은 초보 개발자들이 헷갈려하는 부분입니다. 이번 글에서는 Map과 Entry의 개념과 관계를 명확하게 이해해보겠습니다.

1. Map.Entry 인터페이스란?

Map.Entry<K, V>는 Map 인터페이스 내부에 정의된 내부 인터페이스(nested interface)로, Map에 저장된 하나의 키-값 쌍을 표현합니다.

public interface Map<K, V> {
    // ...
    interface Entry<K, V> {
        K getKey();
        V getValue();
        V setValue(V value);
        // ...
    }
    // ...
}

주요 메서드:

  • getKey(): 엔트리의 키를 반환
  • getValue(): 엔트리의 값을 반환
  • setValue(V value): 엔트리의 값을 변경

2. Map과 Entry의 관계

Map은 본질적으로 Entry(키-값 쌍)들의 집합입니다. 예를 들어 HashMap은 여러 개의 Entry를 저장하고 있는 컨테이너입니다.

시각적으로 표현하면:

Map<String, Integer> = {
    Entry<String, Integer> #1 ("사과" = 10),
    Entry<String, Integer> #2 ("바나나" = 20),
    Entry<String, Integer> #3 ("오렌지" = 15),
    ...
}

3. entrySet() 메서드 이해하기

Map 인터페이스의 entrySet() 메서드는 Map에 포함된 모든 Entry를 담은 Set을 반환합니다.

Set<Map.Entry<K, V>> entrySet();

반환 타입이 Set<Map.Entry<K, V>>인 이유:
1. Set: 중복을 허용하지 않는 컬렉션 (Map의 키는 중복될 수 없으므로 Entry도 중복될 수 없음)
2. Map.Entry: Set의 각 요소는 키-값 쌍을 나타내는 Entry 객체

4. entrySet() 활용 예제

Map<String, Integer> map = new HashMap<>();
map.put("blue", 96);
map.put("hong", 86);
map.put("white", 92);

// 올바른 방법: for-each 루프로 각 엔트리 순회
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    String key = entry.getKey();
    Integer value = entry.getValue();
    System.out.println(key + ": " + value);
}

// 잘못된 방법: 타입 캐스팅 오류 발생
// Map.Entry<String, Integer> entries = (Map.Entry<String, Integer>)map.entrySet(); // 오류!

오류가 발생하는 이유:

  • map.entrySet()Set<Map.Entry<String, Integer>> 타입을 반환
  • 이 Set을 하나의 Map.Entry 객체로 캐스팅할 수 없음

5. 단일 Entry 접근 방법

Map에서 하나의 Entry만 가져오려면:

// 방법 1: iterator 사용
Map.Entry<String, Integer> firstEntry = map.entrySet().iterator().next();

// 방법 2: 스트림 API 사용 (Java 8 이상)
Optional<Map.Entry<String, Integer>> firstEntry = map.entrySet().stream().findFirst();

// 방법 3: 첫 번째 엔트리만 처리하고 루프 종료
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    // entry 사용
    break; // 첫 번째 항목만 처리하고 종료
}

6. 결론

  • Map은 Entry들의 집합입니다.
  • 각 Entry는 하나의 키-값 쌍을 표현합니다.
  • entrySet()은 Map의 모든 Entry를 Set 형태로 반환합니다.
  • Map을 순회할 때는 entrySet()을 활용하여 키와 값에 동시에 접근하는 것이 효율적입니다.
profile
donggyun_ee

0개의 댓글