Springboot Proxy 패턴
1. Proxy 패턴
payment.pay가 여러곳서 사용되는 경우 기존 코드의 변경없이 pay의 내용을 변경하거나 추가 코드를 삽입할 수 있다.
1) Proxy Interface
public interface Payment {
public void pay();
}
2) Business Class
public class Store {
Payment payment;
public Store(Payment payment) {
this.payment = payment
}
public void buySomething(int amount) {
payment.pay(amount);
}
}
3) Proxy Implement #1
public class Cash implements Payment {
@Override
public void pay(int amount) {
System.out.println(amount + " 현금 결제");
}
}
4) Proxy Implement #2
public class CashPerf implements Payment {
@Override
public void pay(int amount) {
StopWatch stopWatch = new StopWatch();
stopWatch.start();
cash.pay(amount);
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());
}
}
5) Client 코드
Client에 기존 코드 대신 Proxy코드를 사용하도록 변경 한다. 기존 Business 코드 (Store)는 변경하지 않았다
public class StoreTest {
// 기존 코드
@Test
public void testCash() {
Payment payment = new Cash();
Store store = new Store(payment);
store.buySomething();
}
// Proxy 적용 코드
@Test
public void testCashPerf() {
Payment payment = new CashPerf();
Store store = new Store(payment);
store.buySomething();
}
}