JAVA

상속을 활용한 멤버십 클래스 구현하기

본투비곰손 2022. 7. 22. 23:12
728x90

고객의 속성 : 고객아이디 ,고객이름, 고객 등급 , 보너스 포인트 적립비율

일반고객의 경우 물품구매시 1%의 보너스 포인트 적립

상위 클래스에서 private로 작성된 멤버 변수는 하위클래스에 서 접근 할 수 없다.

접근 제한 (캡슐화)하기위해 상속에서는 private 대신 protected를 사용한다.

package ch02;

public class Customer {
	protected int customerID;
	protected String customerName;
	protected String customerGrade;
	int bonusPoint;
	double bonusRatio; // 먼저 일반고객의 변수 선언
	
	public Customer() {
		
		customerGrade ="SILVER";
		bonusRatio = 0.01; // Customer 생성
	}
	
	public int calcPrice(int price) {
		bonusPoint += price *bonusRatio;
		return price; // 할인 계산 식을 만들어 준다
	}
	
	
	
	public int getCustomerID() { // 캡슐화된 값를 가져다 값을 반환하는 getter
		return customerID;
	}

	public void setCustomerID(int customerID) { // 캡슐화된 값을 설정하는 setter
		this.customerID = customerID;
	}

	public String getCustomerName() {
		return customerName;
	}

	public void setCustomerName(String customerName) {
		this.customerName = customerName;
	}

	public String getCustomerGrade() {
		return customerGrade;
	}

	public void setCustomerGrade(String customerGrade) { 
		this.customerGrade = customerGrade;
	}

	public String showCustomerInfo() { // 고객 정보를 출력하는 매서드
		return customerName + "님의 등급은" +customerGrade + "이며,보너스 포인트는 " + bonusPoint +"입니다.";
	}
}

VIP고객 역시 공통된 변수를 포함하고 있기 때문에 상속 받을 수 있다.

VIP고객은 추가로 담당직원과 가격 할인이 추가되는 하위 클래스 이다.

package ch02;

public class VIPCustomer extends Customer { // extends를 사용하여 Customer을 상속 받았다.
		
	double salesRatio; //추가적인 변수 선언
	private agentID;
	
	public VIPCustomer() { //생성자 생성
		
		customerGrade ="VIP";
		salesRatio = 0.1;
		bonusRatio = 0.05;
	}

	public String getAgentID() {  // 접근 제한인 private 인 값이기때문에 getter와 setter을 작성한다.
		return agentID;
	}

	public void setAgentID(String agentID) {
		this.agentID = agentID;
	}
}

Customer 클래스에 추가해서 구현 할 수 있지만 세부 사항이 달라질 경우 일일이 생성을 해야하는 번거로움과 코드가

지저분해 지는 상황이 발생된다.

package ch02;

public class CustomerTest {

	public static void main(String[] args) {

		Customer customerLee = new Customer();
		customerLee.setCustomerName("이순신");
		customerLee.setCustomerID(10010);
		customerLee.bonusPoint = 1000;
		System.out.println(customerLee.showCustomerInfo());
		
		VIPCustomer customerKim = new VIPCustomer();
		customerKim.setCustomerName("김유신");
		customerKim.setCustomerID(10020);
		customerKim.bonusPoint = 10000;
		System.out.println(customerKim.showCustomerInfo()); //Customer 매서드지만 상속 받았기때문에 사용이 가능
	}

}
728x90