Enum 캐싱방법(정적 팩토리 메소드 내용 일 부 발췌)
2024. 1. 12. 08:58ㆍ우아한테크코스/프리코스
mathCount에 따른 RANK 를 얻어오고 싶다면
public enum Rank {
RANK1(5),
RANK2(4),
RANK3(3),
RANK4(2),
RANK5(1),
FAIL(0);
private final int matchCount;
Rank(final int matchCount) {
this.matchCount = matchCount;
}
public static Rank getRankByMatchCount(final int matchCount) {
return Arrays.stream(values())
.filter(rank -> rank.matchCount == matchCount)
.findFirst()
.orElse(FAIL);
}
}
- Enum 종류가 N개 있다고 했을때, 매번 O(N)의 복잡도의 연산을 수행하게 된다.
- 종류가 많다면, 그리고 조회가 빈번하다면 개선할 필요성이 보인다.
import java.util.HashMap;
import java.util.Map;
public enum Rank {
RANK1(5),
RANK2(4),
RANK3(3),
RANK4(2),
RANK5(1),
FAIL(0);
private static final Map<Integer, Rank> RANK_MAP = new HashMap<>();
static {
for (Rank rank : values()) {
RANK_MAP.put(rank.matchCount, rank);
}
}
private final int matchCount;
Rank(final int matchCount) {
this.matchCount = matchCount;
}
public static Rank getRankByMatchCount(final int matchCount) {
if(!RANK_MAP.containsKey(matchCount)){
return Rank.FAIL;
}
return RANK_MAP.get(matchCount);
}
}
• 찾으려는 속성에 따른 Enum을 HahMap에 저장해놓고(캐싱), Enum을 찾아 반환하면 O(N)이었던 복잡도를 O(1)로 줄일 수 있게 된다.
'우아한테크코스 > 프리코스' 카테고리의 다른 글
DTO 왜 사용해? Entity와 DTO를 왜 분리해? (0) | 2024.01.12 |
---|---|
EnumMap이 HashMap보다 성능이 좋은 이유 (0) | 2024.01.12 |
상속을 자제하고 합성을 이용하자 (0) | 2024.01.12 |
정적 팩토리 메소드 권장 이유 (0) | 2024.01.12 |
일급컬렉션 사용 이유와 불변성 보장 방법 (0) | 2024.01.12 |