영호

[JAVA] HashMap을 이용해 Enum인스턴스 조회하기 본문

Language/JAVA

[JAVA] HashMap을 이용해 Enum인스턴스 조회하기

0h0 2022. 12. 13. 01:18

개요

Enum을 활용하다 보면 filed값을 이용해 Enum 인스턴스를 조회해야 하는 경우가 있습니다. 이때, Stream, HashMap 등을 사용할 수 있습니다. 이 글에서는 HashMap을 활용한 Enum인스턴스 조회 방법을 알아보겠습니다.

 

HashMap활용 코드

package enumPractice;

import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public enum Number {
    ONE(1),
    TWO(2),
    THREE(3);

    private final int number;

    Number(int number) {
        this.number = number;
    }

    public int getNumber() {
        return number;
    }

    private static final Map<Integer, Number> numbers =
            Arrays.stream(Number.values())
                    .collect(Collectors.toMap(Number::getNumber, Function.identity()));

    public static Number findNumber(int number) {
        if (numbers.containsKey(number)) {
            return numbers.get(number);
        }
        throw new IllegalArgumentException("존재하지 않는 field 입니다.");
    }
}
  • Stream을 활용해 "field : EnumInstance"형태의 HashMap을 생성합니다.
    • Function.identity()의 경우 HashMap의 value에는 실제 instance가 들어가야 하기 때문에 사용합니다.
Arrays.asList("a", "b", "c")
          .stream()
          .map(Function.identity()) // <- 이것과
          .map(str -> str)          // <- 같습니다.
  • 이후 findNumber함수의 parameter를 통해 HashMap에 접근해 값에 맞는 Enum instance를 반환합니다.

장점

  • instance조회가 많이 발생하는 Enum의 경우 처음 HashMap을 만든 뒤에 이를 조회해서 반환해주기 때문에 성능 측면에서 이점을 얻을 수 있습니다.
Comments