이 부분의 grade = EnumGrade.Bronze 에  할인율 5%를 적용하는것을 Enum클래스에 그대로 적용할 수 있다. 

이제 grade를 모두 정리했기 때문에 else 상황에서 발생할 "할인이 없습니다." 문구는 필요없다. (사실 저건 오류방지용이였다.)

만약 할인이 없는 그레이드를 만들려면  BRONZE 보다 아래단계를 추가해야겠지...

Enum클래스도 매서드를 만들 수 있기 때문에 , 맨아래 리턴값도 Enum클래스에서 한번에 연산해버릴 수 있다. 

 

해서 아래와 같이 줄여버렸다. 

package thisjavaexam.enumtest.enumis;
 
public class DiscountGrade {
	// 메인클래스에서 넘어올 가격만 받아서 할인율은 EnumGrade 클래스로 토스한다.
	public int discountPercent(EnumGrade grade, int price) { 
		return grade.finalPrice(price);
	}
}

 

대신 Enum클래스가 좀늘었다.

package thisjavaexam.enumtest.enumis;

public enum EnumGrade {
	//각각 퍼센트를 직접 기입할 수 있다. 
	BRONZE(5),
	SILVER(10),
	GOLD(15),
	DIAMOND(20);

	//할인율 변수를 선언하는데 final 이기에 앞으로 들어올 값을 위해 초기화 하지 않았다. 
	private final int discountPercent;
	
	//이제 이 클래스의 생성자를 만들고 
	EnumGrade(int discountPercent) {
		this.discountPercent = discountPercent;
	}
	
	//getter를 통해서 외부에서 접근하도록 한다. 
	public int getDiscountPercent() {
		return discountPercent;
	}
	
	//최종 결과 값의 할인율을 계산해서 리턴한다. 
	public int finalPrice(int price) {
		return price * discountPercent / 100;
	}	
}

 

 

메인 클래스는 그냥 그대로 두었다. 

package thisjavaexam.enumtest.enumis;

public class GradePriceMain {
		
	public static void main(String[] args) {
		
		int price = 20000;
		
		DiscountGrade discountGrade = new DiscountGrade();

		int bronze = discountGrade.discountPercent(EnumGrade.BRONZE, price);
		int silver = discountGrade.discountPercent(EnumGrade.SILVER, price);	
		int gold = discountGrade.discountPercent(EnumGrade.GOLD, price);
		int diamond = discountGrade.discountPercent(EnumGrade.DIAMOND, price);
		
		System.out.println("BRONZE 의 할인율 5% 적용금액 : " + bronze);
		System.out.println("SILVER 의 할인율 10% 적용금액 : " + silver);
		System.out.println("GOLD 의 할인율 15% 적용금액 : " + gold);
		System.out.println("DIAMOND 의 할인율 20% 적용금액 : " + diamond);
	}
}

 

이렇게 해도 정상적으로 잘 동작한다

 

 

+ Recent posts