Spring Boot로 프로젝트를 하면서 "흠~ 이런 거군" 하고 사용하곤 있었지만, 정확히 어떤 구조인지! 어떤 메소드를 가지고 있는지! 몰랐던 Enum을 정리해보려고 한다 :)
"Enumeration" 의 약자로, 열거/목록/일람표라는 의미를 가지고 있으며 보통 한글로는 열거형
이라고 부른다. 서로 관련 있는 상수들을 모아서 대표 이름으로 클래스를 정의하고 활용하는 데에 사용된다.
데이터 중에서 월, 화, 수, 목, 금, 토, 일
/ 봄, 여름, 가을, 겨울
/ 관리자, 사용자
등과 같은 몇 가지 한정된 값을 갖는 경우 열거형 타입을 사용한다!
본인은 프로젝트를 진행할 때 회원 엔티티의 권한을 관리할 때 사용하였다!
public enum Role {
ADMIN, VIP, USER
}
열거상수를 적을 때는 관례로 대문자로 적으며, 만약 열거 상수가 2개의 단어로 연결되어 있을 때는 _로 연결하는 것이 관례이다.
Java에서 열거 상수는 상수 각각을 내부적으로 public static final
필드이면서 단순한 상수가 아닌 객체로 제공되도록 한다!
Enum의 정의에 나열된 값들은 0부터 순서대로 1씩 증가하는 값을 가지게 된다.
그리고, 자바에서는 Enum을 클래스처럼 사용할 수 있다.
public enum Role {
ADMIN("ad", 10),
VIP("vip", 20),
USER("user", 30);
private final String name;
private final int value;
private Role(String name, int value) {
this.name = name;
this.value = value;
}
public String getName() {
return this.name;
}
public int getValue() {
return this.value;
}
}
Enum 타입 객체도 하나의 데이터 타입이므로 변수를 선언하고 사용한다
public class Member {
/*
다른 필드들 선언
*/
Role role = Role.USER;
}
메소드 | 설명 | 리턴 타입 |
---|---|---|
name() | 열거 객체의 문자열을 리턴 | String |
ordinal() | 열거 객체의 순번(0부터 시작)을 리턴 | int |
compareTo() | 열거 객체를 비교해서 순번 차이를 리턴 | int |
valueOf(String name) | 문자열을 입력받아서 일치하는 열거 객체를 리턴 | enum |
values() | 모든 열거 객체들을 배열로 리턴 | enum[] |
Role r = Role.User;
String memberRole = r.name();
System.out.println(memberRole); //user
Role r = Role.ADMIN;
int roleNum = r.ordinal();
System.out.println(roleNum); //0
Role r1 = Role.ADMIN; //0
Role r2 = Role.USER; //2
int compare1 = r1.compareTo(r2); //USER 기준으로 ADMIN 위치
System.out.println(compare1); //-2
int compare2 = r2.compareTo(r1); //ADMIN 기준으로 USER 위치
System.out.println(compare1); //2
Role r1 = Role.valueOf("VIP");
System.out.println(r1); //VIP
Role[] r = Role.values();
System.out.println(Arrays.toString(r)); //[ADMIN, VIP, USER]
사실 Enum을 이렇게 단순하게만 사용하는 것이 아닌 더 많은 기능을 부여해서 사용할 수 있다!
하지만 나의 실력은 아직 그것을 담아낼 정도가 되지 못하기 때문에...
조금 더 공부를 한 이후에 Enum의 고급 문법과 활용에 대해서 다뤄보고 싶다 :)