1. 정의

final과 같이 자바에서 상수값을 만드는 방법 중 하나이다.


enum은 관련 있는 상수들의 집합이며, 해당 클래스가 상수만으로 작성되어 있을 경우 반드시 class로 선언할 필요 없이 enum으로 선언하면 된다.


일반적인 데이터 타입의 경우 변수를 만든 뒤 형에 맞는 아무 값이나 넣을 수 있으나, 열거형 타입으로 변수를 선언하는 것은 일반 데이터 타입과는 동일하지만 열거형을 선언할 때 명시한 값을 넣을 수 있다.


열거형을 사용하는 가장 큰 이유는 숫자 상수를 사용하는 것보다 열거형 상수를 사용하는 것이 훨씬 직관적이기 때문이다.

열거형은 상수를 묶어서 관리할 수 있다는 큰 장점도 가지고 있고 상수는 상수 자체가 형이 아니기 때문에 형 안정성을 보장할 수 없었으나 자바 5.0 이후로는 열거형을 통해 상수의 형 안정성을 보장하고 있다.



2. 특징

순번

특징

 1

 코드가 단순하고, 가독성이 높음

 2

 인스턴스를 생성할 수 있고 상속을 방지할 수 있음

 3

 enum이라는 키워드를 사용하기 때문에 의도가 분명하게 나타남



3. 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import java.util.HashMap;
import java.util.Map;
 
public enum Sample {
    PASSED(1"Passed""The test has passed."),
    FAILED(-1"Failed""The test was executed but failed."),
    DID_NOT_RUN(0"Did not run""The test did not start.");
    
//  변수, Map 생성
    int code;
    String label;
    String description;
    static Map<Integer, Sample> map;
    
//  생성자 메소드로 변수들 초기화
    private Sample (int code, String label, String description) {
        this.code = code;
        this.label = label;
        this.description = description;
        
        System.out.println("console> code : " + code);
        System.out.println("console> label : " + label);
        System.out.println("console> description : " + description);
    }
    
//  정수를 넣으면 해당하는 상수 값을 Sample 클래스에 담아 리턴하는 메소드
    public static Sample getStatus(int i) {
//      main 메소드에서 getStatus() 호출하는 경우 Map에 들어있는게 없기 때문에
//      initMapping() 메소드를 무조건 호출하게 됨
        if (map == null) {
            initMapping();
        }
        
        System.out.println("console> getStatus get(i)) : " + map.get(i));
        
        return map.get(i);
    }
    
    private static void initMapping() {
        map = new HashMap<Integer, Sample>();
        
//      Sample 클래스에 선언되어 있는 상수들을 모두 돌림
        for (Sample sample : values()) {
            map.put(sample.code, sample);
            
            System.out.println("console> map.get = " + sample);
        }
    }
    
    public int getCode() {
        return code;
    }
    
    public String getLabel() {
        return label;
    }
    
    public String getDescription() {
        return description;
    }
    
    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder();
        
        sb.append("Status");
        sb.append("{code = ").append(code);
        sb.append(", label = '").append(label).append('\'');
        sb.append(", description = '").append(description).append('\'');
        sb.append('}');
        
        return sb.toString();
    }
    
    public static void main(String[] args) {
        System.out.println(Sample.PASSED);
        System.out.println(Sample.getStatus(-1));
    }
}
cs


+ Recent posts