출처
- 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 |
'학습 > Java' 카테고리의 다른 글
[java] Annotation Processor란? (추가공부 필요) (0) | 2020.03.21 |
---|---|
[java] Optional 클래스 (0) | 2020.02.29 |
[java] Mustache 사용하기 (3) | 2020.02.15 |
[java] 템플릿 엔진 / SSR & CSR / JSP와 Mustache / 정적파일 (0) | 2020.02.10 |
[java] 테스트를 도와주는 JUnit / assertJ / h2 (0) | 2020.02.09 |
댓글