package com.haenin.section02.openclosed.resolved;
/* 설명.
*   Payment 인터페이스를 통해 새로운 결제 수단을
*   기존 코드의 수정 없이 쉽게 추가할 수 있다.
*   PaymentProcessor 클래스는 구체적인 결제 방식을
*   알 필요 없이 Payment 인터페이스만 의존(결합)한다.*/
public class Application {
    public static void main(String[] args) {
        PaymentProcessor paymentProcessor = new PaymentProcessor();
        paymentProcessor.processPayment(new CreditCardPayment());
        paymentProcessor.processPayment(new KakaoPayment());
        paymentProcessor.processPayment(new NaverPayPayment());

    }
}

package com.haenin.section02.openclosed.resolved;

public class PaymentProcessor {
    public void processPayment(Payment payment){
        payment.process();
    }
}

package com.haenin.section02.openclosed.resolved;

public interface Payment {
    void process();
}

package com.haenin.section02.openclosed.resolved;

public class CreditCardPayment implements Payment{
    @Override
    public void process() {
        System.out.println("신용카드로 결제 처리");
    }
}

package com.haenin.section02.openclosed.resolved;

public class KakaoPayment implements Payment{
    @Override
    public void process() {
        System.out.println("카카오페이로 결제 처리");
    }
}

package com.haenin.section02.openclosed.resolved;

public class NaverPayPayment implements Payment {
    @Override
    public void process() {
        System.out.println("네이버페이로 결제 처리");
    }
}