사이드 프로젝트를 하면서 팀원과 enum 정의를 하던 중 성능 개선을 할 수 있는 부분에 대해 모르고 계셨던 부분이 있어 알려드린 적이 있습니다.
주어진 값(문자열, 숫자 등)을 통해 enum을 찾으려는 경우 valueOf 또는 반복문을 돌게 되는데 이런 경우 찾는 시간 복잡도는 O(n)이 됩니다.
이 것을 enum 정의 시점에 static으로 map으로 만들어 놓고 map에서 값을 찾는다면 O(1)으로 바꿀 수 있습니다.
특정 enum의 displayName으로 찾는 예제 코드는 아래와 같습니다.
private final static Map<String, Foo> displayNameMap = Arrays.stream(values()).collect(
Collectors.toUnmodifiableMap(
x -> x.displayName,
x -> x
)
);
static public Foo of(String displayName){
return displayNameMap.getOrDefault(displayName, UNKOWN);
}
'제안&정리' 카테고리의 다른 글
[AWS] EB 설정 팁 (0) | 2023.01.30 |
---|---|
[JAVA] Optional map (0) | 2023.01.15 |
[Git] Conventional Commit (0) | 2022.11.28 |
[Circuit Breaker] API 품질과 Timeout, Slow Call (0) | 2022.10.24 |
[React, React Native] Update 구독/발행 (0) | 2022.09.11 |