열거형(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/
'Language > JAVA' 카테고리의 다른 글
람다식과 함수형 인터페이스 (0) | 2023.02.13 |
---|---|
쓰레드 동기화(Synchronization) (0) | 2023.02.13 |
Thread.sleep() 과 interrupted() (0) | 2023.02.12 |
쓰레드(Thread) 는 무엇일까? (0) | 2023.02.12 |
Generics (지네릭스) 를 알아보자 (0) | 2023.02.12 |
댓글