Java

[Enum] 열거 타입

비번변경 2021. 9. 23. 19:08
열거 타입(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 테스트

 

기타 메서드

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()); 
    }
}

 

실행 결과

 

enum 메서드 테스트