본문 바로가기
학습/Java

[java] Enum의 개념과 사용법

by KKambi 2020. 2. 23.

출처

- https://woowabros.github.io/tools/2017/07/10/java-enum-uses.html

- 이동욱(jojoldu)님의 코드를 참고하였으며, 제가 이해한 바를 바탕으로 정리했습니다.

 

 

 

Enum이란?

1. 상수를 사용하기 위한 열거형 (Enum Type)

 

2. enum은 사실 클래스이므로 생성자를 가질 수 있으나, private만 허용된다.

-> 직접 생성 불가

-> enum type의 상수를 선언할 때마다 동시에 생성자를 호출한다.

 

3. 다양한 상수를 같은 의미로 묶을 수 있다.

-> "Y", "1", true를 한 묶음으로

-> 반복적인 if문을 줄일 수 있다

 

4. 상수에 특정 행위(메소드)를 지정할 수 있다.

-> DB에서 뽑아온 특정 값은 특정 메소드를 통해서만 처리될 수 있다

 

5. enum type 안에 메소드를 선언할 수 있다.

-> 상수에 지정된 값을 뽑는 getter를 만들 수 있다

 

 

Enum의 사용법

1. 상수만을 할당 시 세미콜론(;)을 붙이지 않는다.

1
2
3
4
5
6
public enum PayGroup {
    CASH,    
    CARD,
    ETC,
    EMPTY
}
cs

 

2. 상수에 값을 지정할 때, 그에 맞는 멤버 필드와 생성자를 선언해야 한다.

getter도 추가하면 좋다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public enum TableStatus{
    Y("1"true),
    N("0"false);
 
    private String table1Value;
    private boolean table2Value;
 
    TaleStatus(String table1Value, boolean table2Value){
        this.table1Value = table1Value;
        this.table2Value = table2Value;
    }
 
    public String getTable1Value(){
        return table1Value;
    }
 
    public boolean getTable2Value(){
        return table2Value;
    }
}
cs

 

3. 상수에 특정 행위(메소드)를 할당할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public enum CalculatorType{
    CALC_A(value -> value),
    CALC_B(value -> value * 10)
 
    private Function<Long, Long> expression;
 
    CalculatorType(Function<Long, Long> expression){
        this.expression = expression;
    }
 
    public long calculate(long value){
        return expression.apply(value);
    }
}
cs

 

4. 상수에 java.util.Arrays.ArrayList를 할당할 수 있다.

- Arrays의 private 정적 클래스인 ArrayList

- 사이즈를 변동시킬 수 있는 java.util.ArrayList와 달리 사이즈를 바꿀 수 없는 정적 클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
public enum PayGroup {
    CASH("현금", Arrays.asList("TOSS""ACCOUNT_TRANSFER")), 
    CARD("카드", Arrays.asList("PAYCO""KAKAO_PAY")),
    ETC("기타", Arrays.asList("POINT""COUPON"))
    EMPTY("없음", Collections.EMPTY_LIST);
 
    private String title;
    private List<String> payList;
 
    //생성자
 
    //메소드
}
cs

 

 

 

댓글