ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] Enum 활용
    JAVA 2022. 2. 25. 17:17

     

    과제를 하는 도중 static final 변수를 쓰는 것과 enum을 저렇게 길게 쓰는것에 대해 의문점이 왔다.

    entity에 enum을 쓰게 되면 저 name이 그대로 db에 저장되는데 너무 저장공간을 많이 쓴다는 생각이 들었다.

    하지만 분명 수업에서 김영한 선생님께서 enum타입은 string을 써야 오류가 없다라고 하셨기때문에 활용법에 대해서 감을 잘 못잡고 있었다.

    그리고 static final 변수도 아 먼가 저렇게 너무 많으면 지저분하고 나중에 알아보기도 어려울걸 알면서도 다른방법을 잘 몰라 가만히 두고만 있었다.

     

    결국 오늘 enum활용에 대해 많이 찾아봤고, 17~18년에 쓴 이동욱 선생님의 블로그 글들에서 해답을 찾았다.

     

    enum으로 직관적으로 계산하기

    장르별 점수를 나눠야 하는 식이 필요했고, 원래는 하나하나 if로 구분해가며 계산을 해왔다.

    하지만 이는 변수별 연관성을 조금 찾기 어려웠고, expression을 활용해 좀더 좋은 방법을 찾았다.

     

     

    이런식으로 expression을 써 각각의 타입들이 본인만의 계산식을 갖을 수 잇도록 구현할 수 있었다.

     

    관리 주체를 DB에서 객체로 전환

    값이 크게 변하지 않는 상황에서 디비로 타입을 구분하는것은 비효율적인 일이다.

    영화분류, 멤버분류등은 그런 조건에 부합하기 때문에 enum으로 관리하고 있었다.

     

    하지만 enum의 name과 title을 하나로 돌리고 있어, 테이블을 비효율적으로 굴리고 있었고 있었기 때문에,

    name과 title을 분리하여 테이블의 점유공간을 최소화하면서 enum을 그래도 json으로 반환하면 발생되는 name만 출력되는 문제를 해결해야했다.

     

    value가 따로있는 모든 enum클래스들이 리스트로 출력이 가능하도록 인터페이스를 하나 생성했다.

     

    VO는 이 인터페이스를 생성자 파라미터로 받아 인스턴스를 생성할 수 있도록 했다.

     

    enum은 인터페이스만 구현하면 된다.

    그리고 컨트롤러단에서 뿌려주면 된다.

    정말 json형태로 잘나온다. 킹갓제너럴 향로..

     

    하지만 이 형태로는 한가지 단점이 있다.

    필요할때마다 Enum.values를 통해 value 인스턴스를 생성하는 과정이 반복된다는 것이다.

    런타임시에는 Enum의 상수들이 변경되지 않기에, value를 갖고있는 Enum들에 대해 Bean에 등록하여 사용하도록 변경이 가능하다고 한다.

     

    이렇게 enummappervalue들을 감쌀 클래스를 만들고

     

    config에 빈으로 등록해놓고 쓰면 반복되는 과정을 없앨 수 있다.

     

     

    갓향로.. 나두 더 열심히 해야것다.

     

     

    출처 : Java Enum 활용기 | 우아한형제들 기술블로그 (woowahan.com)

    Enum 활용 & Enum 리스트 가져오기 (tistory.com)

     

    'JAVA' 카테고리의 다른 글

    [JAVA] ArrayList 정렬하기  (0) 2022.01.16
    [Java] HashMap Value 기준으로 정렬하기  (0) 2022.01.13
    [Java] Java 함수적 인터페이스 Consumer, Supplier  (0) 2021.12.17
    [Java]Optional 활용법  (0) 2021.12.17
    [Java] Optional  (0) 2021.12.17

    댓글

Designed by Tistory.