java/코드 리뷰

15. demo2 - (6) CustomerDemo - 2 ( enum 선언 )

Astaroth아스 2020. 4. 27. 13:46
1
2
3
4
5
6
7
8
package demo2;
 
public enum Grade {
    
    VIP, GOLD, SILVER, BRONZE
    
}
 
 
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
package demo2;
 
public class GradeDemo {
    
    public static void main(String[] args) {
        // 열거형의 주요 메서드
        
        // String name()
        // 열거형 상수의 이름을 문자열로 반환
        String name = Grade.VIP.name();
        System.out.println(name);
        System.out.println();
        
        // 열거형 상수의 순서값을 반환 (0부터 시작)
        int no1 = Grade.VIP.ordinal();
        int no2 = Grade.GOLD.ordinal();
        int no3 = Grade.SILVER.ordinal();
        int no4 = Grade.BRONZE.ordinal();
        
        System.out.println(Grade.VIP + " " + no1);
        System.out.println(Grade.GOLD + " " + no2);
        System.out.println(Grade.SILVER + " " + no3);
        System.out.println(Grade.BRONZE + " " + no4);
        System.out.println();
        
        // static T Enum.valueOf(Class<T> enumType, String name)
        // static T valueOf(String name)
        // 지정된 열거형 타입에서 이름에 해당하는 열거형 상수를 반환
        
        Grade grade1 = Enum.valueOf(Grade.class"VIP");
        Grade grade2 = Grade.valueOf("GOLD");
        System.out.println(grade1.name() + ", " + grade1.ordinal());
        System.out.println(grade2.name() + ", " + grade2.ordinal());
        
    }
    
}
 
 
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
package demo2;
 
public class Customer {
    
    private String name;
    private Grade grade; //enum 타입의 grade 변수
    
    public Customer() {
        
    }
    
    public Customer(String name, Grade grade) {
        this.name = name;
        this.grade = grade;
    }
    
    public Customer(String name, String gradeName) {
        this.name = name;
 
        // 둘 중 하나
        this.grade = Enum.valueOf(Grade.class, gradeName);
        this.grade = Grade.valueOf(gradeName);
    }
    
    
    
    public String getName() {
        return name;
    }
    
    public Grade getGrade() {
        return grade;
    }
    
}
 
 
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
package demo2;
 
public class CustomerDemo {
    
    public static void main(String[] args) {
        
        // enum 타입의 상수값을 사용하는 Customer 생성
        Customer customer1 = new Customer("홍길동", Grade.VIP);
        Customer customer2 = new Customer("홍길동", Grade.GOLD);
        Customer customer3 = new Customer("홍길동", Grade.SILVER);
        Customer customer4 = new Customer("홍길동", Grade.BRONZE);
        
        // enum 타입에서 정의한 상수값 외의 값은 대입 될 수 없음 (컴파일시 에러)
//        Customer customer5 = new Customer("홍길동", "골드");
//        Customer customer6 = new Customer("홍길동", 0);
//        Customer customer7 = new Customer("홍길동", Grade.VVIP);
        
        System.out.println(getPoint(customer1, 120000));
        System.out.println(getPoint(customer2, 120000));
        System.out.println(getPoint(customer3, 120000));
        System.out.println(getPoint(customer4, 120000));
        
    }
    
    public static int getPoint(Customer customer, int orderPrice) {
        
        int point = 0;
        if (customer.getGrade() == Grade.VIP) {
            point = (int) (orderPrice * 0.07) ;
        } else if (customer.getGrade() == Grade.GOLD) {
            point = (int) (orderPrice * 0.05) ;
        } else if (customer.getGrade() == Grade.SILVER) {
            point = (int) (orderPrice * 0.03) ;
        } else if (customer.getGrade() == Grade.BRONZE) {
            point = (int) (orderPrice * 0.01) ;
        } 
        
        return point;
    }
    
}