고급인터페이스

결제 처리 인터페이스

PaymentProcessor 인터페이스를 구현하여 신용카드 결제와 카카오페이 결제 기능을 만듭니다. 인터페이스의 개념을 학습합니다.

인터페이스구현다형성

결제 처리 인터페이스

📋 문제 설명

PaymentProcessor 인터페이스를 구현하여 신용카드 결제카카오페이 결제 기능을 만드세요.

인터페이스의 개념다형성을 학습합니다.


🎯 인터페이스 구조

Java
PaymentProcessor (인터페이스)
 ├── CreditCardPayment (신용카드 구현)
 └── KakaoPayPayment (카카오페이 구현)

💻 코드 구조

PaymentProcessor 인터페이스

Java
public interface PaymentProcessor {
    // 결제 처리하는 함수
    boolean processPayment(double amount);

    // 환불하는 함수
    void refund(double amount);

    // 결제 방법 가져오는 함수
    String getPaymentMethod();
}

인터페이스 메서드 (구현 클래스에서 모두 구현해야 함)

  • processPayment(double amount) - 결제 처리 (성공 시 true 반환)
  • refund(double amount) - 환불 처리
  • getPaymentMethod() - 결제 방법 이름 반환

⚠️ 인터페이스: 모든 메서드가 추상 메서드 (구현 없이 선언만)


CreditCardPayment 클래스 (신용카드 결제)

Java
public class CreditCardPayment implements PaymentProcessor {
    private String cardNumber;
    private String cardHolderName;

    // 디폴트 생성자
    public CreditCardPayment() {

    }

    // 매개변수가 있는 생성자
    public CreditCardPayment(String cardNumber, String cardHolderName) {
        // cardNumber와 cardHolderName을 초기화하세요.
    }

    @Override
    public boolean processPayment(double amount) {
        // 1. "[cardHolderName]의 카드 [cardNumber]로 [amount]원 결제 시도" 메시지 출력
        // 2. true를 리턴하시오.
    }

    @Override
    public void refund(double amount) {
        // "[cardHolderName]의 카드 [cardNumber]로 [amount]원 환불 처리" 메시지 출력
    }

    @Override
    public String getPaymentMethod() {
        // "Credit Card" 문자열 반환
    }
}

필드

  • private String cardNumber - 카드 번호
  • private String cardHolderName - 카드 소유자 이름

구현 메서드

  • 모든 인터페이스 메서드를 @Override하여 구현

KakaoPayPayment 클래스 (카카오페이 결제)

Java
public class KakaoPayPayment implements PaymentProcessor {
    private String phoneNumber;

    // 디폴트 생성자
    public KakaoPayPayment() {

    }

    // 매개변수가 있는 생성자
    public KakaoPayPayment(String phoneNumber) {
        // phoneNumber를 초기화하세요.
    }

    @Override
    public boolean processPayment(double amount) {
        // 1. "[phoneNumber]로 카카오페이 [amount]원 결제 시도" 메시지 출력
        // 2. true를 리턴하시오.
    }

    @Override
    public void refund(double amount) {
        // "[phoneNumber]로 카카오페이 [amount]원 환불 처리" 메시지 출력
    }

    @Override
    public String getPaymentMethod() {
        // "KakaoPay" 문자열 반환
    }
}

필드

  • private String phoneNumber - 전화번호

구현 메서드

  • 모든 인터페이스 메서드를 @Override하여 구현

📝 Main 클래스 테스트

Java
public class Main {
    public static void main(String[] args) {
        // CreditCardPayment 객체 생성
        CreditCardPayment cardPayment = new CreditCardPayment(
            "1234-5678-9012-3456",
            "홍길동"
        );

        // KakaoPayPayment 객체 생성
        KakaoPayPayment kakaoPayment = new KakaoPayPayment("010-1234-5678");

        // PaymentProcessor 배열로 다형성 테스트
        PaymentProcessor[] payments = {cardPayment, kakaoPayment};

        // 각 결제 방식에 대해 반복
        for (PaymentProcessor payment : payments) {
            System.out.println("=== " + payment.getPaymentMethod() + " ===");

            // 결제 처리
            boolean success = payment.processPayment(50000);
            System.out.println("결제 성공: " + success);

            // 환불 처리
            payment.refund(30000);

            System.out.println(); // 빈 줄
        }
    }
}

예상 출력:

Java
=== Credit Card ===
홍길동의 카드 1234-5678-9012-3456로 50000원 결제 시도
결제 성공: true
홍길동의 카드 1234-5678-9012-3456로 30000원 환불 처리

=== KakaoPay ===
010-1234-5678로 카카오페이 50000원 결제 시도
결제 성공: true
010-1234-5678로 카카오페이 30000원 환불 처리

💡 학습 포인트

1. 인터페이스 (Interface)

  • interface 키워드로 선언
  • 모든 메서드가 추상 메서드 (구현 없음)
  • implements 키워드로 구현
  • 다중 구현 가능 (한 클래스가 여러 인터페이스 구현 가능)

2. 강제성

  • 인터페이스를 구현하면 모든 메서드를 반드시 구현해야 함
  • 하나라도 빠뜨리면 컴파일 에러 발생

3. 다형성 (Polymorphism)

  • PaymentProcessor 타입으로 모든 구현체를 다룰 수 있음
  • 배열이나 리스트에 담아 일괄 처리 가능
  • 실제 결제 시스템에서 많이 사용되는 패턴

4. 추상 클래스 vs 인터페이스

구분추상 클래스인터페이스
상속단일 상속만 가능다중 구현 가능
메서드일반 메서드 + 추상 메서드모든 메서드가 추상
필드인스턴스 변수 가능상수만 가능
용도"is-a" 관계"can-do" 관계