Language/JAVA

열거형(Enum) 을 알아보자

YoonJong 2023. 2. 12. 14:09
728x90

열거형(Enum) 은 서로 관련된 상수를 편리하게 선언하기 위해 사용합니다.

입력해야할 값이 정해져있는 경우, ex) 회원권한, 요일(월~일) 등 이러한 경우에는 Enum 타입으로 생성하면 다른 불필요한 값이 들어올 수 없으므로 더욱 효율적인 코드를 작성할 수 있도록 도와줍니다.

 

클래스에서 상수를 선언하기 위해서는 아래와 같은 방법을 사용했습니다.

public class Card {

    static final int CLOVER = 0;
    static final int HEART = 1;
    static final int DIAMOND = 2;
    static final int SPADE = 3;
    
}

Enum 을 사용하면 아래와 같이 변경할 수 있습니다.

public class Card {
    enum Kind {CLOVER, HEART, DIAMOND, SPADE} // 열거형 Kind를 정의
}

 

또다른 예시를 들어보겠습니다. 보통 많이 사용하는 회원의 권한 Enum 타입 입니다.

value 를 추가할 수 있습니다.

@Getter
public enum AccountType {

    ROLE_ADMIN("관리자"),
    ROLE_GUEST("손님");

    String value;

    AccountType(String value) {
        this.value = value;
    }
}

ROLE_ADMIN 은 관리자이며, ROLE_GUEST 는 손님으로 값을 가져올 수 있도록 value 를 지정해주었습니다.

해당 value 값을 가져오려면 .getValue(); 을 통해 가져올 수 있습니다.

 

Member 클래스에서 Enum 을 사용하기 위해서는 @Enumerated 를 사용해야합니다.

@Enumberated 의 속성은 2가지가 있습니다.

2가지 중 EnumType.STRING 으로 쓰는 것을 강력 추천합니다.

ORDINAL 으로 사용하면 상수의 순서가 Integer 값으로 나타나며, STRING 타입은 상수의 값(STRING) 으로 표현됩니다.

 

만약 ORDINAL일 때 ADMIN, GUEST 가 있다면 ADMIN 은 0 , GUEST 는 1 로 순서를 통해 표현됩니다. 이때, 가장 처음에 SELLER 가 추가되었다면 SELLER 가 0 으로 변환됩니다.

현재까지 DB 에 있는 데이터(ADMIN 이 0)는 변하지 않으므로 이후 데이터변화가 있을 때 혼동이 생길 수 밖에 없습니다.

 

STRING 으로 했다면, DB 에도 ADMIN, GUEST 로 기입되기 때문에 불상사가 생기지 않습니다.

@Enumerated(EnumType.STRING)
private AccountType accountType;//회원 권한

 

 

현재 EnumType 만을 사용해서 활용했으나, 조금 더 고급스럽게 사용하기 위해서는 아래 블로그를 참고하면 좋을거 같습니다.

https://techblog.woowahan.com/2527/

 

Java Enum 활용기 | 우아한형제들 기술블로그

{{item.name}} 안녕하세요? 우아한 형제들에서 결제/정산 시스템을 개발하고 있는 이동욱입니다. 이번 사내 블로그 포스팅 주제로 저는 Java Enum 활용 경험을 선택하였습니다. 이전에 개인 블로그에 E

techblog.woowahan.com

 

728x90