package CHAPTER07;

// 결제 인터페이스 정의: 모든 결제 방식이 공통으로 가져야 할 기능을 선언
interface Payment {
	// 결제 수행 메소드 (각 결제 방식에서 반드시 구현해야 함)
	void processPayment(double amount);

	// 영수증 출력 메소드 (Java 8 이상에서는 기본 구현 가능 - default 메소드)
	default void printReceipt(double amount) {
		System.out.println("결제 금액: " + amount + "원");
	}
}

// 신용카드 결제 클래스: Payment 인터페이스 구현
class CreditCardPayment implements Payment {
	private String cardNumber; // 신용카드 번호

	// 생성자: 카드 번호를 받아 초기화
	public CreditCardPayment(String cardNumber) {
		this.cardNumber = cardNumber;
	}

	// 신용카드 결제 수행 (인터페이스 메소드 구현)
	@Override
	public void processPayment(double amount) {
		System.out.println("신용카드 (" + cardNumber + ")로 " + amount + "원 결제 완료.");
		printReceipt(amount); // 기본 제공되는 영수증 메소드 호출
	}
}

// PayPal 결제 클래스: Payment 인터페이스 구현
class PayPalPayment implements Payment {
	private String email; // PayPal 계정 이메일

	// 생성자: 이메일을 받아 초기화
	public PayPalPayment(String email) {
		this.email = email;
	}

	// PayPal 결제 수행 (인터페이스 메소드 구현)
	@Override
	public void processPayment(double amount) {
		System.out.println("PayPal 계정 (" + email + ")을 통해 " + amount + "원 결제 완료.");
		printReceipt(amount); // 기본 제공되는 영수증 메소드 호출
	}
}

public class C7_04_InterfacePayment {
	public static void main(String[] args) {
		Payment creditCard = new CreditCardPayment("1234-5678-9012");
		creditCard.processPayment(50000); 

		System.out.println(); 

		Payment payPal = new PayPalPayment("user@example.com");
		payPal.processPayment(30000);
	}
}
