[AOP] 프록시 패턴

김민중·2025년 2월 28일

Spring Triangle

목록 보기
8/9

기존 코드 건드리지 않고 새 기능 추가하기


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());
	}
}

스프링에서는 이러한 과정이 여러 매커니즘에 의해 숨겨져 있어 쉽게 사용할 수 있다.

profile
Anything

0개의 댓글