Java EnumMap 클래스: 초보자를 위한 가이드

서론

안녕하세요, 미래의 자바 프로그래머 여러분! 오늘, 우리는 자바의 EnumMap 클래스의 세계로 흥미진진한 여행을 떠날 거예요. 지금, 여러분이 무슨 생각을 하고 있는지 알아요: "EnumMap? 그게 복잡해!" 하지만 걱정하지 마세요! 이 튜토리얼을 끝내면 여러분은 EnumMap을 프로처럼 사용할 수 있고, 길을 떠나면서 좀 더 즐거운 시간을 보낼 수도 있을 거예요.

Java - EnumMap

간단한 비유로 시작해볼게요. 일주일 각 날에 맞춰 양말을 정리할 수 있는 특별한 서랍을 상상해보세요. 그게 바로 EnumMap의 개념이에요 - 열거 상수를 키로 데이터를 정리하는 방법이죠. 멋지지 않나요? 그럼 들어가 볼까요!

클래스 선언

먼저, EnumMap을 어떻게 선언하는지 살펴보겠습니다:

import java.util.EnumMap;

enum DaysOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }

EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);

이 예제에서는 우리의 DaysOfWeek 열거를 키로, 활동을 저장하기 위해 String 값을 사용하는 EnumMap을 생성하고 있습니다. DaysOfWeek.class 부분은 자바에게 우리가 키로 사용하는 열거가 무엇인지 알려줍니다.

클래스 생성자

EnumMap은 세 개의 생성자를 가지고 있습니다. 각각을 살펴보겠습니다:

  1. EnumMap(Class keyType)

    EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);

    이 생성자는 지정된 열거 형식의 키를 가진 빈 EnumMap을 만듭니다.

  2. EnumMap(EnumMap<K,? extends V> m)

    EnumMap<DaysOfWeek, String> activitiesCopy = new EnumMap<>(activities);

    이 생성자는 지정된 EnumMap과 같은 키 형식을 가진 EnumMap을 만들고, (있다면) 같은 매핑으로 초기화합니다.

  3. EnumMap(Map<K,? extends V> m)

    Map<DaysOfWeek, String> regularMap = new HashMap<>();
    regularMap.put(DaysOfWeek.MONDAY, "Gym");
    EnumMap<DaysOfWeek, String> activitiesFromMap = new EnumMap<>(regularMap);

    이 생성자는 정상 Map에서 초기화된 EnumMap을 만듭니다.

클래스 메소드

이제, EnumMap에서 가장 일반적으로 사용되는 몇 가지 메소드를 살펴보겠습니다:

메소드 설명
put(K key, V value) 지정된 값과 지정된 키를 연관시킵니다
get(Object key) 지정된 키에 연관된 값을 반환합니다
remove(Object key) (있다면) 해당 키의 매핑을 제거합니다
size() 키-값 매핑의 수를 반환합니다
clear() 이 맵에서 모든 매핑을 제거합니다
containsKey(Object key) 이 맵에 지정된 키의 매핑이 있는지 여부를 반환합니다
containsValue(Object value) 이 맵이 하나 이상의 키를 지정된 값으로 매핑하는지 여부를 반환합니다

이 메소드들이 어떻게 작동하는지 보겠습니다:

EnumMap<DaysOfWeek, String> activities = new EnumMap<>(DaysOfWeek.class);

// 키-값 쌍 추가
activities.put(DaysOfWeek.MONDAY, "Gym");
activities.put(DaysOfWeek.TUESDAY, "Cinema");

// 값 가져오기
String mondayActivity = activities.get(DaysOfWeek.MONDAY);
System.out.println("월요일 활동: " + mondayActivity);

// 키 존재 여부 확인
boolean hasWednesday = activities.containsKey(DaysOfWeek.WEDNESDAY);
System.out.println("수요일이 있습니까: " + hasWednesday);

// 키-값 쌍 제거
activities.remove(DaysOfWeek.TUESDAY);

// 크기 구하기
int size = activities.size();
System.out.println("활동 수: " + size);

// 맵 지우기
activities.clear();

이 예제에서는 여러 가지 날에 활동을 추가하고, 값을 검색하고, 키를 확인하고, 항목을 제거하고, 마지막으로 전체 맵을 지우는 등 서랍을 정리하고 다시 정리하는 것과 같은 작업을 수행합니다.

상속된 메소드

EnumMap은 부모 클래스에서 메소드를 상속받습니다. 여기 몇 가지 유용한 메소드가 있습니다:

메소드 상속된 위치 설명
clone() AbstractMap 이 맵의 얕은 복사본을 생성합니다
equals(Object o) AbstractMap 지정된 객체와 이 맵의 동등성을 비교합니다
hashCode() AbstractMap 이 맵의 해시 코드 값을 반환합니다
toString() AbstractMap 이 맵의 문자열 표현을 반환합니다

열거, 정수 쌍 EnumMap에 키-값 추가 예제

이제, 좀 더 복잡한 작업을 시도해볼게요. 우리는 열거를 키로, 정수를 값으로 사용하는 EnumMap을 생성할 거예요:

enum Fruit { APPLE, BANANA, ORANGE, MANGO }

EnumMap<Fruit, Integer> fruitPrices = new EnumMap<>(Fruit.class);

// 키-값 쌍 추가
fruitPrices.put(Fruit.APPLE, 100);
fruitPrices.put(Fruit.BANANA, 80);
fruitPrices.put(Fruit.ORANGE, 120);
fruitPrices.put(Fruit.MANGO, 150);

// EnumMap 출력
System.out.println("과일 가격: " + fruitPrices);

// 값 업데이트
fruitPrices.put(Fruit.BANANA, 90);

// 특정 값 가져오기
int applePrice = fruitPrices.get(Fruit.APPLE);
System.out.println("사과의 가격: " + applePrice);

// EnumMap 반복
for (Map.Entry<Fruit, Integer> entry : fruitPrices.entrySet()) {
System.out.println(entry.getKey() + ": $" + entry.getValue());
}

이 예제에서는 과일 가격 목록을 만듭니다. 여러 가지 과일에 가격을 추가하고, 바나나의 가격을 업데이트하고, 사과의 가격을 검색하고, 마지막으로 전체 맵을 반복하여 모든 과일의 가격을 인쇄합니다.

그리고 이렇게 하면 됩니다! 여러분은 자바의 EnumMap 클래스의 기본 개념을 배웠습니다. 기억하세요, 연습이 실력을 만든다는 말이 있습니다. 그런 �码에 실험해보세요.谁知道? 여러분이 EnumMap으로 자신의 전체 인생을 정리할 수 있을지도 모릅니다!(천박이지만, 그들은 정말 유용하죠.)

코딩을 즐겁게 하세요, 여러분의 EnumMap이 언제나 잘 정리되길 바랍니다!

Credits: Image by storyset