Enum


<aside> 🛣️

설명


예제


<aside> 🧸

설명


public enum Grade {
		BASIC, GOLD, DIAMOND
}

열거형 확인


image.png

package enumm;

public class EnumRefMain {

    public static void main(String[] args) {
        System.out.println("class BASIC : " + Grade.BASIC.getClass());
        System.out.println("class GOLD : " + Grade.GOLD.getClass());
        System.out.println("class DIAMAND : " + Grade.DIAMOND.getClass());

        System.out.println("ref BASIC = " + refValue(Grade.BASIC));
        System.out.println("ref GOLD = " + refValue(Grade.GOLD));
        System.out.println("ref DIAMAND : " + refValue(Grade.DIAMOND));
    }

    private static String refValue(Object grade) {
        return Integer.toBinaryString(System.identityHashCode(grade));
    }
}

출력
class BASIC : class enumm.Grade
class GOLD : class enumm.Grade
class DIAMAND : class enumm.Grade
ref BASIC = 11101100000011110101110010011
ref GOLD = 1110010100100011100000110001111
ref DIAMAND : 110100101000100100010110101011

출력 값에서 확인 가능하듯이 선언한 타입이 Grade 타입을 사용하는 것을 확인 가능
--------------------------------------
package enumm;

public class DiscountService {

    public int discount(Grade grade, int price) {
        int discountPercent = 0;

        if (grade == Grade.BASIC) {
            discountPercent = 10;
        } else if (grade == Grade.GOLD) {
            discountPercent = 20;
        } else if (grade == Grade.DIAMOND) {
            discountPercent = 30;
        } else {
            System.out.println("할인 x");
        }

        return price * discountPercent / 100;
    }
}
-----------------------------------
package enumm;

public class EnumEx3_1 {
    public static void main(String[] args) {
        int price  = 10000;
        DiscountService discountService = new DiscountService();
        //열거형 생성
        int basic = discountService.discount(Grade.BASIC, price);
        int gold = discountService.discount(Grade.GOLD, price);
        int diamond = discountService.discount(Grade.DIAMOND,price);

        System.out.println("BASIC 등급의 할인 금액 : " + basic);
        System.out.println("GOLD 등급의 할인 금액 : " + gold);
        System.out.println("DIAMOND 등급의 할인 금액 : " + diamond);
    }
}

BASIC 등급의 할인 금액 : 1000
GOLD 등급의 할인 금액 : 2000
DIAMOND 등급의 할인 금액 : 3000

</aside>

열거형 외부 생성


<aside> 🔗

설명


열거형 생성 정상
---------------
DiscountService discountService = new DiscountService();
        //열거형 생성
        int basic = discountService.discount(Grade.BASIC, price);
        
열거형 외부 생성 -> 불가능
-------------------------
DiscountService discountService = new DiscountService();
				Grade myGrade = new Grade();
				double result = discountService.discount(myGrade, price);
				System.out.println("result price : " + result);

</aside>