열거 타입은 한정된 값만을 갖는 데이터 타입(
enumeration type
)이다.
열거 타입은 몇 개의 열거 상수(enumeration constant
) 중에서 하나의 상수를 저장하는 데이터 타입이다.
한정된 값을 갖는 데이터의 예시는 다음과 같다.
열거 타입을 선언하기 위해서는 먼저 열거 타입의 이름을 정하고 열거 타입 이름으로 소스 파일(
.java
)을 생성해야 한다.
열거 타입 이름은 관례적으로 첫 문자를 대문자로 하고, 나머지는 소문자로 구성한다.
만약 여러 단어로 구성된 이름이라면 단어 첫 문자는 대문자로 하는 것이 관례이다.
Week.java
MemberGrade.java
ProductKind.java
소스 파일의 내용의 구조는 다음과 같다.
enum 열거타임이름 {
열거상수이름1,
열거상수이름2,
...
}
enum
키워드는 열거 타입을 선언하기 위한 키워드이다._
)로 연결하는 것이 관례이다.enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAT,
SATURDAY,
SUNDAY
}
열거 타입 변수를 사용하는 방법은 다음과 같다.
열거타입 변수이름;
Week today;
Week reservationDay;
열거 타입 변수를 선언했다면 다음과 같이 열거 상수를 저장할 수 있다.
열거 상수는 단독으로 사용할 수 없으며, 반드시 열거타입.열거상수
로 사용된다.
열거타입 변수 = 열거타입.열거상수;
Week today = Week.SUNDAY;
열거 타입 변수는 null
값을 저장할 수도 있다.
Week birthday = null;
열거 객체는 열거 상수의 문자열을 내부 데이터로 가지고 있다.
모든 열거 타입은 컴파일 시에Enum
클래스를 상속하게 되어 있기 때문에java.lang.Enum
클래스에 선언된 메소드들을 사용할 수 있다.
name()
name()
메소드는 열거 객체의 이름(열거 타입을 정의할 때 사용한 상수 이름)을 반환한다.
Week today = Week.SUNDAY;
String name = today.name; //name은 "SUNDAY"
ordinal()
ordinal()
메소드는 전체 열거 객체 중 몇 번째 열거 객체인지 알려준다. 순번은 0번부터 시작한다.
Week.java
enum Week {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAT,
SATURDAY,
SUNDAY
}
Week today = Week.SUNDAY;
int ordinal = today.ordinal; //ordinal은 6
compareTo()
compareTo()
메소드는 매개값으로 주어진 열거 객체를 기준으로 전후로 몇 번째 위치하는지를 비교한다.
열거 객체가 매개값의 열거 객체보다
Week day1 = Week.MONDAY;
Week day2 = Week.WEDNESDAY
int result1 = day1.compareTo(day2); //result1은 -2
int result2 = day2.compareTo(day1); //result2는 2
valueOf()
valueOf()
메소드는 매개값으로 주어지는 문자열과 동일한 문자열을 가지는 열거 객체를 리턴한다.
이 메소드는 외부로부터 문자열을 입력받아 열거 객체로 변환할 때 유용하게 사용할 수 있다.
Week weekDay = Week.valueOf("SATURDAY");
weekDay
변수는 Week.SATURDAY
열거 객체를 참조하게 된다.
values()
values()
메소드는 열거 타입의 모든 열거 객체들을 배열로 만들어서 리턴한다.
Week[] days = Week.values();
for (Week day : days) {
System.out.println(day);
}
Week
배열은 다음과 같이 생성된다.
배열의 인덱스는 열거 객체의 순번과 같고, 각 인덱스 값은 해당 순번의 열거 객체 번지이다.