본문 바로가기
우테코 프리코스/프리코스 오픈미션

EnumMap 클래스란?

by sloth365 2025. 11. 9.

이번에 처음 알게 된 EnumMap이다.

Map 구현체 중 하나로 키값을 Enum 클래스만 받는 특징이 있다.

 

EnumMap의 장점으로는 Enum클래스의 ordinal() 메서드를 사용하여 데이터에 접근하는데

HashMap처럼 해쉬값을 구할 필요 없이 Enum클래스의 인덱스 값으로 접근한다.

그렇기 때문에 HashMap 보다 더 빠르다는 장점이 있다

 

무엇보다 가장 큰 장점은 타입 안전성이다.

키는 오직 Enum만 받을 수 있기 때문에 복잡한 구현 과정에서 다른 데이터를 키로 받을

위험을 제거해 준다.

즉, 개발자의 실수로 인해 데이터가 오염될 부담을 줄여주는 것이다.

 

그렇다면 언제 쓰는 걸까?

키로 오직 Enum클래스만 받는다는 확신이 있을 때 Map을 EnumMap으로 구현하면 된다.

 

public enum Category {
    MEAT("🥩 고기 종류"),
    DRINK("🥤 음료 종류"),
    VEGETABLE("🥬 야채 종류"),
    FRUIT("🍎 과일 종류");

    private final String koreanName;

    Category(String koreanName) {
        this.koreanName = koreanName;
    }

    @Override
    public String toString() {
        return koreanName;
    }
}

 

public class Inventory {
    private final Map<Category, Map<String, Integer>> inventory = new EnumMap<>(Category.class);

    public Inventory() {
        createInventory();
    }

    private void createInventory() {
        for (Category category : Category.values()) {
            inventory.put(category, new HashMap<>());
        }
    }

나는 이번에 카테고리 별로 정리할 자료구조가 필요했는데 해결책을 찾는 와중에

알게 된 Map 구현체였다.

나는 카테코리별로 이름과 개수가 필요해서 이중 Map을 사용했는데 외부 Map을 EnumMap으로

카테고리만 받을 수 있게 했다.