프로젝트를 하던 중에, 여러개 데이터를 비교해서 조건문으로 처리해야 하는 부분이 생겼다.

 

근데 string.equlas("a") && string.equals("b") ... 같은 방식으로 처리하기에는

코드가 너무 지저분해져서 다른 방법으로 처리하기로 했다.

 


1. 열거체 (enum)

열거체는 관련이 있는 상수들의 집합이라고 한다. 

특정한 데이터를 갖는 값들을 열거형으로 묶어주는 것 같다.

 

 

2. 사용 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public enum Enum {
    
    ALPHABET("alphabet", Arrays.asList("a","b","c""d","e","f")),
                                      
    NUMBER("number", Arrays.asList("1""2""3""4""5""6"));
                                                                     
    public String type; // 값종류
    public List<String> value; // 값
 
    Enum(String type, List<String> value) {
        this.type = type;
        this.value= value;
    }
 
    public boolean hasValue(String value) { // 해당 종류에 원하는 값이 있는지 조회
        return value.stream().anyMatch(name -> name.equals(value));
    }
 
    public static boolean findByTypeValue(String type, String value) { // 매개변수가 Enum 상수에 존재하는지 확인
        if(Arrays.stream(Enum.values())
            .filter(f -> f.type.equals(type))
            .anyMatch(group -> group.hasValue(value))) {
                return true;
            }
 
        return false;
    }
}
cs

ALPHABET과 NUMBER 상수를 두개 만들어서 각 상수에 문자열 리스트를 넣었다.

 

hasValue 함수에서는 해당 문자열 리스트에 매개변수로 전달된 값이 있는지를 조회해 boolean 값을 반환한다.

 

findByTypeValue 함수에서는 type과 value값을 매개변수로 전달받아,

입력한 type의 문자열 리스트에 value 값이 있는지 조회하고, boolean 값을 반환한다.

 

값을 더 추가하고 싶을 때는 각 상수 문자열 리스트에 값을 추가하거나,

새로운 상수를 만들면 된다.

 

1
2
3
4
5
6
7
8
9
if (Enum.findByTypeValue("alphabet", "a") {
    ....
}
else if (Enum.findByTypeValue("number", "1") {
    ....
}
else {
    ....
}
cs

사용할때는 이렇게 사용하면 된다.

나는 값을 받아와서 변수에 저장하고, Enum.findByTypeValue("alphabet", myValue) ...

이런식으로 사용했다.

 

3. 참고 자료

Java Enum 활용기 - 우아한형제들 기술 블로그

+ Recent posts