열거형 enum은 상수를 의미별로 함께 묶어서 사용하고자 할 때 주로 사용된다. 예를들면 일, 월, 화, 수, 목, 금, 토와 같이 요일을 하나로 묶어 관리할 수 있으며, 데이터 값의 의미를 명확하게 전달할 수 있다
열거형 enum은 상수로 구성된 특별한 클래이다. 클래스처럼 변수와 메소드를 가질 수 있지만, 상속이나 인스턴스를 생성할 수는 없으며, enum 값은 상수로 public, static, final 속성을 가지고 있어 변경될 수 없다.
장점
데이터 값의 의미를 명확히 알 수 있다.
컴파일 시 데이터 타입 및 유효성 체크를 할 수 있다.
선언방법
열거형은 enum 키워드를 사용하여 정의하며, 열거형의 이름은 보통 클래스명과 같이 첫 글자를 대문자로 시작한다.
{ } 안에 열거값은 , 로 구분하며 상수와 같이 대문자를 사용한다.
열거형의 선언은 클래스 안에서도 선언할 수 있고, 클래스 밖에서도 선언할 수 있다.
메서드 종류
valueOf(String str) : 문자열 str과 일치하는 열거값을 반환합니다.
values( ) : 열거값 전부를 배열로 반환합니다.
ordinal( ) : 열거값의 순서를 반환합니다
예제
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, STURDAY, SUNDAY;
}
public enum Weeks {
MONDAY("mon", 10),
TUESDAY("tue", 20),
WEDNESDAY("wed", 30),
THURSDAY("thu", 40),
FRIDAY("fri", 50),
STURDAY("sat", 60),
SUNDAY("sun", 70);
private final String name;
private final int value;
private Weeks(String name, int value) {
this.name = name;
this.value = value;
}
public String getName() {
return this.name;
}
public int getValue() {
return this.value;
}
}
for (Weeks week : Weeks.values()) {
System.out.println(week.getName());
}
결과---------------------------------------
mon
tue
wed
thu
fri
sat
sun
oridinal() 메서드는 전체 enum 중 현재 값이 몇번째인지 알려준다
Weeks wed = Weeks.WEDNESDAY;
System.out.println(wed.ordinal());
결과---------------------------------
2
valueOf() 메서드는 문자열을 이용해서 enum 값을 얻어오는 메서드
Weeks week = Weeks.valueOf("MONDAY");
System.out.println(week.getName());
결과-------------------
mon
name() 메서드는 반대로 enum 타입의 값이 가지고 있는 문자열을 리턴한다
Weeks week = Weeks.valueOf("MONDAY");
System.out.println(week.name());
결과-------------------
MONDAY
compareTo() 는 두 enum 값을 비교할 수 있다
Weeks mon = Weeks.MONDAY;
Weeks tue = Weeks.TUESDAY;
Weeks wed = Weeks.WEDNESDAY;
Weeks thu = Weeks.THURSDAY;
System.out.println(mon.compareTo(Weeks.TUESDAY));
System.out.println(tue.compareTo(Weeks.TUESDAY));
System.out.println(wed.compareTo(Weeks.TUESDAY));
System.out.println(thu.compareTo(Weeks.TUESDAY));
결과-------------------
-1
0
1
2
인자로 넘겨준 enum 값과 비교해서 전후로 몇 번째에 위치하는지를 나타낸다
만약 enum 객체의 매개값이 enum 객체보다 순번이 빠르다면 음수가 리턴되고
같다면 0, 늦으면 양수가 리턴 됨