이전 포스팅에서는, EnumGrade 클래스와 DiscountGrade 클래스를 리팩토링해서 줄였다. 

 

이제 메인 메서드를 줄여볼 차례이다.

 

bronze~diamond 까지 동일한 코드가 반복적이다. 

Enum 클래스를 사용하면  ".values()"를 통해서 각 등급을 배열로 처리해서  BRONZE(0인덱스)~DIAMOND(3인덱스) 에 넣을 수 있다.

해서 요내용을 반복문(루프)를 통해서 배열을 출력과 동시에 줄여준다 .

package thisjavaexam.enumtest.enumis;

public class GradePriceMain {
		
	public static void main(String[] args) {
		
		int price = 20000;
		//각 등급을 배열로 집어넣어 처리하면서 출력까지 진행 
		EnumGrade[] grade = EnumGrade.values();
		for(int i = 0 ; i < grade.length; i ++) {
			//아래 매서드를 선언해서 등급 ,가격을 불러온다.
			printDiscountPercent(grade[i],price);
		}
	}
	// enum 상수는 static이므로, 메모리를 메서드영역에서 불러와야 하기때문에 static 메서드에서 직접 접근 가능해야 한다.
	public static void printDiscountPercent(EnumGrade grade,int price) {
		System.out.println(grade.name() + " 의 할인율 적용 금액은 " + price + "입니다.");
	}
}

 

 

나머지 기존코드도 추가 업로드 

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 DiscountGrade {
	// 메인클래스에서 넘어올 가격만 받아서 할인율은 EnumGrade 클래스로 토스한다.
	public int discountPercent(EnumGrade grade, int price) { 
		return grade.finalPrice(price);
	}
}

 

3개의 클래스로 정리했다. 

 

이제 배열로 처리하도록 작업했으니, 다른 등급도 enum클래스에 할인율과 함께 추가할수 있다. 

vip만 30% 추가해서 실행결과 

 

엥??...

 

이런 버그쟁이 ...

 

public static void printDiscountPercent(EnumGrade grade,int price) {

System.out.println(grade.name() + " 의 할인율 적용 금액은 " + grade.finalPrice(price) + "입니다.");

}

 

자꾸 사소한 실수해버린다 .

 

 

Enum 학습 우선 여기까지! ..

 

참고로 학습한 내용을 참조하여 다시 구성한 코드입니다.

+ Recent posts