728x90
🧐 EnumMap
EnumMap은 Java의 Map 인터페이스를 구현한 컬렉션 클래스 중 하나로, Enum 타입의 상수를 효율적으로 처리하기 위해 설계되었습니다.
EnumMap은 다른 Map과 달리 특별한 제약사항이 있는데, Map의 키(key)로는 Enum만을 사용할 수 있다는 것입니다.
🧐 EnumMap의 장점
EnumMap은 내부적으로 배열을 사용하기 때문에, 일반적인 Map의 구현체들보다 더 좋은 성능을 가집니다.
또한 HashMap처럼 Key의 충돌이 발생하지 않습니다.
🧐 사용 방법
EnumMap<Enum 타입, 값 타입> map = new EnumMap<>(Enum타입.class); // Enum 클래스에 대한 타입토큰
예를 들면 다음과 같습니다.
enum Weekday {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
EnumMap<Weekday, String> map = new EnumMap<>(Weekday.class);
map.put(Weekday.MONDAY, "Monday");
map.put(Weekday.TUESDAY, "Tuesday");
map.put(Weekday.WEDNESDAY, "Wednesday");
🧐 동시성 문제
EnumMap에 대한 문서를 보면 다음과 같은 설명이 나와있는 것을 알 수 있습니다.
Like most collection implementations EnumMap is not synchronized.
If multiple threads access an enum map concurrently, and at least one of the threads modifies the map, it should be synchronized externally.
This is typically accomplished by synchronizing on some object that naturally encapsulates the enum map.
If no such object exists, the map should be "wrapped" using the Collections.synchronizedMap method.
This is best done at creation time, to prevent accidental* unsynchronized access:
요약하지면 EnumMap은 Thread-safe하지 않기 때문에, 이를 Thread-safe하게 사용하기 위해서는 Collections.synchronizedMap()을 사용하라는 것입니다.
Collections.synchronizedMap(new EnumMap<>(...));
728x90
'☕️ Java > 기본' 카테고리의 다른 글
[Java] Collectors.toMap() 의 여러 가지 사용법 (7) | 2023.03.14 |
---|---|
[Java] 얕은 복사, 방어적 복사, 깊은 복사 (12) | 2023.02.23 |
[Java] groupingBy를 통해 동일한 자료의 개수 구하기 (0) | 2022.11.12 |
[Java] Thread (9) - ForkJoin 프레임워크 (0) | 2022.07.15 |
[Java] Thread (8) - 쓰레드의 동기화(2) - Lock과 Condition (3) | 2022.07.15 |