미리 정의된 상수들의 특별한 집합 혹은 특정 상수들을 열거한 것
추가적인 생성없이 외부에서 사용이 가능하지만, 기본적으로 불변이기에 public static final의 형태의 띄고 있기도 하다.
아래와 같이 코드를 작성할 수 있다.
public enum OperatorType {
PLUS("+"),
MINUS("-"),
MULTI("*"),
DIVIDE("/");
}
public static OperatorType FindOperatorType(String type){
return Arrays.stream(values())
.filter(x -> x.getOperation().equals(type))
.findAny().orElse(null);
}
//열거된 상수들을 순회하여 매개변수와 동일한 상수가 있는지 확인하고 지정할 수 있다.
데이터 연관
PLUS ("+", 43),
MINUS ("-", 44),
MULTI ("*", 45),
DIVIDE ("/", 46);
private String operType;
private int aciCode;
void Operation(String operType, int aciCode) {
this.operType = operType;
this.aciCode = aciCode;
}
public String getOperTypeVal() {
return operType;
}
public int getAciCodeVal() {
return aciCode;
}
//마치 hashMap이나 json의 (key,value)처럼 데이터간의 연관관계를 만들 수 있다.
String operType = Operation.getOperTypeVal();
int aciCode = Operation.getAciCodeVal(); // 이런 식으로 깔끔한 관리가 가능하다.
PLUS ((a,b) -> a + b),
MINUS ((a,b) -> a - b),
MULTI ((a,b) -> a * b),
DIVIDE ((a,b) -> a / b);
private final BiFunction<Double,Double,Double> operation ;
void Operation(BiFunction<Double,Double,Double> operation) {
this.operation = operation;
}
public Double compute(Double x, Double y) {
return operation.apply(x,y);
}
//함수형 프로그래밍으로 ENUM에서 데이터 연산을 하는것도 가능하다.
개발자 입장에선 코드도 깔끔해지고 원인파악도 원만해지니 우리 모두 Enum을 적극적으로 활용해보도록하자!