본문 바로가기

제안&정리

[JAVA] enum find O(n) -> O(1)

사이드 프로젝트를 하면서 팀원과 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