기존 코드 건드리지 않고 새 기능 추가하기
public class Cash implements Payment {
@Override
public void pay(int amount){
System.out.println(amount + " 현금 결제");
}
}
위와 같은 현금 결제하는 클래스가 있다고 해보자.
그리고 아래와 같이 무언가를 살 수 있다.
public class Store {
Payment payment;
public Store(Payment payment){
this.payment = payment;
}
public void buySomething(int amount){
payment.pay(amount);
}
}
그런데, 결제를 할 때 걸리는 시간을 측정하고 싶다.
그러면 payment.pay(amount); 위아래로 시간을 측정하는 코드를 추가할 수 있지만,
대신 다음과 같은 프록시 클래스를 이용할 수도 있다.
public class CashPerf implements Payment{
Payment cash = new Cash();
@Override
public void pay(int amount){
StopWatch stopWatch = new StopWatch();
stopWatch.start();
cash.pay(amount);
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());
}
}
스프링에서는 이러한 과정이 여러 매커니즘에 의해 숨겨져 있어 쉽게 사용할 수 있다.