1) Customer 클래스 (부모/기본 고객)

필드(멤버변수) 의미
- customerID, customerName, customerGrade
→ 고객의 기본 정보 - bonusPoint
→ 누적 포인트 (구매할 때마다 쌓임) - bonusRatio
→ 구매금액의 몇 %를 포인트로 적립할지 비율
protected가 왜 중요?
- protected는 상속받은 자식 클래스(VIPCustomer) 에서도 접근 가능해.
- 그래서 VIPCustomer에서 customerGrade="VIP" 같은 변경이 가능해짐.

생성자 의미
- 객체 생성 시 고객 기본값 세팅
- 기본 등급은 "SILVER"
- SILVER는 포인트 적립률 1% (0.01)
✅ 즉, new Customer(10010, "박새로이") 하면
박새로이는 자동으로 SILVER / 1% 적립이 됨.

calcPrice()의 역할
- 구매 금액 price를 받으면:
- 포인트를 적립하고 (bonusPoint += price*bonusRatio)
- 실제 지불 금액을 리턴함
근데 Customer(실버)는 할인 없음
그래서 return price; 그대로 반환.

고객 정보 출력용 메서드
- 이름, 등급, 누적 포인트를 문자열로 반환
2) VIPCustomer 클래스 (자식/VIP 고객)

VIPCustomer는 Customer를 상속받는다
- Customer의 필드/메서드를 그대로 물려받음
- customerName, bonusPoint, bonusRatio, calcPrice(), showCustomerInfo() 등
추가로 VIP 전용 변수:
- saleRatio : 할인율

생성자에서 제일 중요한 1줄: super(...)
- super(customerID, customerName)는
→ 부모(Customer) 생성자를 먼저 실행한다는 뜻이야.
즉 VIPCustomer를 만들 때도
- 먼저 Customer 생성자가 돌아서 ID/이름 세팅
- 그 다음 VIP 전용 값으로 덮어씀
VIP 전용 세팅:
- 등급: "VIP"
- 적립률: 0.05 → 5%
- 할인율: 0.1 → 10%

오버라이딩(재정의)
Customer의 calcPrice()를 VIP용으로 바꿔버림.
VIP는:
- 포인트 적립은 5%로 더 많이
- 실제 지불 금액은 10% 할인해서 반환
예: 10000원 구매하면
- 포인트: 10000 * 0.05 = 500점
- 지불 금액: 10000 - 10000*0.1 = 9000원
(int)는 소수점 버림 처리 (원 단위 정수로 만들려고)

이건 사실 부모랑 내용이 거의 같아서
굳이 오버라이딩 안 해도 됨 (현재는 동일하게 출력됨)
(만약 VIP는 담당 상담원이라든지 추가 정보를 표시할 거면 오버라이딩이 의미 있어져.)
3) CustomerTest (실행 & 다형성 확인)

- 박새로이는 일반 고객(SILVER)
- 구매금액 10000원
Customer customerYoon = new VIPCustomer(10020, "윤세리"); int priceYoon = 10000;
⭐ 여기서 핵심: 부모 타입(Customer) 변수로 자식 객체(VIPCustomer)를 받음
이게 바로 다형성(polymorphism) 이고,
코드가 유연해지는 이유야.

실행 시 무슨 일이 일어나냐?
- customerPark.calcPrice()는 → Customer 버전 실행
- 포인트: 10000 * 0.01 = 100
- 지불금액: 10000
- customerYoon.calcPrice()는 변수 타입이 Customer여도
- 실제 객체가 VIPCustomer이므로
- VIPCustomer의 오버라이딩된 calcPrice()가 실행됨
- return price - (int) (price*saleRatio) = 10000 - (10000*0.1)=9000
- 포인트: 10000 * 0.05 = 500
- 지불금액: 9000
✅ 이걸 “동적 바인딩”이라고도 해 (실행 시점에 실제 객체 기준으로 메서드 결정)
System.out.println(customerPark.showCustomerInfo()); System.out.println(customerYoon.showCustomerInfo());
- 박새로이: SILVER, 포인트 100
- 윤세리: VIP, 포인트 500
4) 이 코드에서 배워야 하는 핵심 4가지
✅ 1) 상속 (extends)
VIPCustomer는 Customer를 재사용/확장한다.
✅ 2) super()
자식 생성자에서 부모 생성자 먼저 호출해서 기본 세팅을 가져온다.
✅ 3) 오버라이딩(@Override)
VIP는 calcPrice()를 자기 규칙(할인/적립)으로 바꾼다.
✅ 4) 다형성
Customer customerYoon = new VIPCustomer(...)
→ 같은 Customer 타입으로도 VIP/일반 고객을 한꺼번에 처리 가능.
'👩💻Developer 💡 > 💾Back-end🕊️' 카테고리의 다른 글
| Java 예외 처리 (0) | 2026.02.11 |
|---|---|
| Java 8. Interface (0) | 2026.02.10 |
| JAVA : 상속 (0) | 2026.02.10 |
| JAVA : 상속 (2) | 2026.02.09 |
| Java기초 : 클래스 (1) | 2026.02.06 |