[JAVA] Enum

권재현·2024년 10월 23일

JAVA

목록 보기
6/11

정의

  • 미리 정의된 상수들의 특별한 집합 혹은 특정 상수들을 열거한 것

  • 추가적인 생성없이 외부에서 사용이 가능하지만, 기본적으로 불변이기에 public static final의 형태의 띄고 있기도 하다.

    아래와 같이 코드를 작성할 수 있다.

public enum OperatorType {
    PLUS("+"),
    MINUS("-"),
    MULTI("*"),
    DIVIDE("/");
	}

그래서 왜 사용하는가

  • 문자열과 비교해 IDE의 적극적인 지원(자동완성, 오타검증, 텍스트 리펙토링 등) 가능
  • 허용 가능한 값들의 효율적인 통제
  • 리팩토링 시 변경 범위 최소화
    • Enum 코드만 수정하면 되므로 휴먼 에러를 최소화 시킬 수 있다.

활용 방법

  • 데이터 순회
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을 적극적으로 활용해보도록하자!

참고

profile
여전히 헤매이고 있습니다.

0개의 댓글