온라인 결제 시스템
📋 문제 설명
Payment 부모 클래스를 상속받아 카드 결제와 계좌이체 결제 클래스를 구현하세요.
다양한 결제 방식을 처리하기 위한 상속 구조를 학습합니다.
🎯 클래스 계층 구조
Java
Payment (부모 클래스)
├── CardPayment (신용카드 결제)
└── BankTransferPayment (계좌이체 결제)
💻 코드 구조
Payment 클래스 (부모 클래스)
Java
public class Payment {
protected String paymentMethod;
public Payment(String paymentMethod) {
this.paymentMethod = paymentMethod;
}
public void processPayment(double amount) {
// 결제 방식과 금액 출력
System.out.println("결제 방식: " + paymentMethod + ", 결제 금액: " + amount + "원");
}
}
필드
protected String paymentMethod- 결제 방식 (예: "카드", "계좌이체")
메서드
processPayment(double amount)- 결제 처리 (자식 클래스에서 오버라이드)
CardPayment 클래스 (자식 클래스)
Java
public class CardPayment extends Payment {
private String cardType;
public CardPayment(String cardType) {
// 1. 부모 생성자 호출: super("카드")
// 2. cardType 초기화
}
@Override
public void processPayment(double amount) {
// 부모 클래스의 메서드를 오버라이드하여
// 카드 유형을 포함한 결제 정보를 출력합니다.
// 예: "결제 방식: 카드, 카드 유형: [cardType], 결제 금액: [amount]원"
}
}
추가 필드
private String cardType- 카드 유형 (예: "신용카드", "체크카드")
오버라이드 메서드
processPayment()- 카드 유형 정보를 추가하여 결제 처리
BankTransferPayment 클래스 (자식 클래스)
Java
public class BankTransferPayment extends Payment {
private String bankName;
public BankTransferPayment(String bankName) {
// 1. 부모 생성자 호출: super("계좌이체")
// 2. bankName 초기화
}
@Override
public void processPayment(double amount) {
// 부모 클래스의 메서드를 오버라이드하여
// 은행 이름을 포함한 결제 정보를 출력합니다.
// 예: "결제 방식: 계좌이체, 은행 이름: [bankName], 결제 금액: [amount]원"
}
}
추가 필드
private String bankName- 은행 이름 (예: "국민은행", "신한은행")
오버라이드 메서드
processPayment()- 은행 이름 정보를 추가하여 결제 처리
📝 Main 클래스 테스트
Java
public class Main {
public static void main(String[] args) {
// CardPayment 객체 생성
CardPayment cardPayment = new CardPayment("신용카드");
// 카드 결제 처리
System.out.println("=== 카드 결제 ===");
cardPayment.processPayment(50000);
System.out.println(); // 빈 줄
// BankTransferPayment 객체 생성
BankTransferPayment bankPayment = new BankTransferPayment("국민은행");
// 계좌이체 결제 처리
System.out.println("=== 계좌이체 결제 ===");
bankPayment.processPayment(30000);
}
}
예상 출력:
Java
=== 카드 결제 ===
결제 방식: 카드, 카드 유형: 신용카드, 결제 금액: 50000원
=== 계좌이체 결제 ===
결제 방식: 계좌이체, 은행 이름: 국민은행, 결제 금액: 30000원
💡 학습 포인트
1. 상속을 통한 코드 재사용
- 공통 기능(
processPayment)은 부모 클래스에 정의 - 각 결제 방식의 고유한 정보는 자식 클래스에 추가
2. 메서드 오버라이딩
- 부모의 메서드를 자식 클래스에서 재정의
- 각 결제 방식에 맞는 정보 출력
3. 다형성의 기초
- 같은 메서드 이름(
processPayment)으로 다른 동작 수행 - 실제 결제 시스템에서 활용되는 설계 패턴