Java- enum

2020. 7. 1. 08:53Java

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
 
public class Ex3 {
    
    public static void main(String[] args) {
        /*
         * enum 타입(열거형 데이터 타입)
         * - 한정된 상수로 구성되는 데이터 타입
         * - 클래스와 유사한 형태로 구성(정의)
         * - 별도의 값을 지정하지 않고 상수 자체를 그대로 사용
         * - 값에 대한 비교 수행 시 단순 값만 비교하는 것이 아니라
         *   해당 enum 타입에 대한 비교까지 수행하므로 일반 상수형 변수 사용보다 안정적이다!
         * 
         * < 기본 정의 문법 >
         * enum enum타입명 {
         *         상수명1, 상수명2, ..., 상수명n;
         * }
         * 
         * < 기본 사용 문법 >
         * enum타입명.상수명
         * 
         */
        
        // enum 타입 변수를 선언하여 상수값 할당 가능
        Grade grade = Grade.SALES;
        
        System.out.println(grade); // 변수명만 사용하여 값 출력 가능(toString() 생략)
        System.out.println(grade instanceof Enum); // enum 타입은 Enum 클래스를 상속받음
        System.out.println(grade instanceof Object); // enum 타입은 Object 클래스를 상속받음
        
        // if문을 사용하여 enum 타입 값 비교(일반 상수 비교 방법과 동일)
        if(grade == Grade.NORMAL) {
            System.out.println("일반 근로자!");
        } else if(grade == Grade.PART_TIME_JOB) {
            System.out.println("시간제 근로자!"); 
        } else if(grade == Grade.SALES) {
            System.out.println("영업직 근로자!");
        }
        
        // Grade 타입이 아닌 다른 enum 타입과의 비교 자체가 불가능하므로 안정적이다!
//        if(grade == TestEnum.TEST1) {}
        
        // switch ~ case 문에 enum 타입 사용 가능
        // => switch 문 조건식에 사용 가능한 타입 : int타입 이하의 정수, 문자열, enum
        switch(grade) {
            // 주의! case 문 사용 시 enum타입명.상수명이 아닌 상수명만 바로 비교
            case NORMAL : System.out.println("일반 근로자!"); break;
            case PART_TIME_JOB : System.out.println("시간제 근로자!"); break;
            case SALES : System.out.println("영업직 근로자!");
        }
        
        // compareTo() 메서드 : ordinal 차이값을 리턴
        System.out.println(grade.compareTo(Grade.NORMAL));
        
    }
 
}
 
enum Grade { // enum 타입 정의 => enum타입명을 Grade 로 지정(클래스와 선언부 거의 동일)
    SALES/* Ordinal = 0 */, PART_TIME_JOB/* Ordinal = 1 */, NORMAL/* Ordinal = 2 */
    // 자동으로 순서번호(Ordinal) 가 기록되며 0 부터 부여됨
    
}
 
 
cs

enum 타입에 대해 배워보았는데 저번에 배웠던 상수 선언과는 다르게 public static final로 선언하는 게 아니라

클래스 선언과 같이 정의를 했다. enum안에 상수로 사용할 변수들을 선언하고 그 변수들에게는 배열과 같이

0번부터 번호가 주어지고 이걸 사용하여 여러가지를 할 수 있다. 그리고 객체 생성과 같이 선언하여 사용하며

객체 생성이 되었으면 거기에 선언한 상수를 하나 대입하여 여러 가지 비교를 할 수 있었고, 이것저것 생각하지 않고 

바로 상수 선언하여 비교를 바로 할수있어서 유용하게 쓰일 것 같으니 잘 외워둬야겠다.

'Java' 카테고리의 다른 글

Java - 정규표현식,Pattern,Matcher  (0) 2020.07.02
Java - SimpleDateFormat,MessageFormat  (0) 2020.07.02
Java - Date,time,Calendar  (0) 2020.06.30
Java - Generic  (0) 2020.06.30
Java - Stack & Queue  (0) 2020.06.30