열거 타입(Enumeration type)
관련이 있는 상수의 집합
enum은 enumeration이라는 셈, 계산, 열거, 목록이라는 뜻의 영단어의 앞부분을 딴 예약어다.
Java 1.5 이상부터 지원한다.
enum을 사용하면 비교 시 값뿐만 아니라 타입까지 비교가 가능하며, 상수값이 재정의되더라도 재컴파일할 필요가 없다는 장점이 있다.
정의
클래스 정의하듯이 정의한다.
enum NAME {
VAL1,
VAL2,
VAL3
}
// 예시
enum STATUS {
START,
RUNNING,
STOP,
TERMINATE
}
열거형 변수 선언 및 초기화
마찬가지로 클래스 사용하듯이 사용한다.
// 선언
NAME name;
// 상수 접근
NAME.VAL1
// 예시
STATUS status = STATUS.START;
열거형 상수에 추가 속성 부여
정의 블록 내에 추가 속성을 저장할 속성을 선언하여 생성자를 정의하면, 해당 상수가 추가적인 속성을 가질 수 있다. 이때 추가 속성은 어떤 코드 값이 될 수도 있고, 문자열인 메시지가 될 수도 있다. 정의하기 나름이다.
예시
enum STATUS {
START(1), RUNNING(2), STOP(0), TERMINATE(-1);
private int val;
private STATUS(int val){ // 생성자
this.val = val;
}
private int getVal(){
return this.val;
}
}
public class main {
public static void main(String args[]) {
STATUS status = STATUS.START;
System.out.println(status);
System.out.println(status.getVal());
}
}
실행 결과
기타 메서드
enum의 조상 클래스인 java.lang.Enum 클래스가 지원하는 몇 가지 메서드를 정리해둔다.
메서드 | 설명 |
ordinal() | 객채가 열거형에서 몇 번째로 정의되었는지, 즉 인덱스 반환 |
valueOf() | 전달받은 문자열에 해당하는 열거 객체 반환 |
values() | 열거형의 모든 상수를 포함하는 배열 반환 |
예시
public class main {
public static void main(String args[]) {
STATUS status = STATUS.START;
STATUS[] arr = STATUS.values();
for (STATUS val : arr){
System.out.printf("%s ", val);
}
System.out.println();
System.out.println(STATUS.valueOf("STOP"));
System.out.println(status.ordinal());
}
}
실행 결과