728x90
구체 클래스 기반 프록시 - 테스트(프록시 X)


구체 클레스(핵심 로직)
@Slf4j
public class ConcreteLogic {
public String operation(){
log.info("ConcreteLogic 실행");
return "data";
}
}
클라이언트 클래스
public class ConcreteClient {
private ConcreteLogic concreteLogic;
public ConcreteClient(ConcreteLogic concreteLogic) {
this.concreteLogic = concreteLogic;
}
public void execute(){
concreteLogic.operation();
}
}
Test
@Test
public void noProxy(){
ConcreteLogic concreteLogic = new ConcreteLogic();
ConcreteClient client = new ConcreteClient(concreteLogic);
client.execute();
}
구체클레스 기반 프록시 - 테스트 구현
인터페이스가 아니라 클래스를 기반으로 상속을 받아서 프록시를 만들어보겠다.


서버 TimeProxy
@Slf4j
public class TimeProxy extends ConcreteLogic{
private ConcreteLogic concreteLogic;
public TimeProxy(ConcreteLogic concreteLogic) {
this.concreteLogic = concreteLogic;
}
@Override
public String operation() {
log.info("TimeDecorator 실행");
long startTime = System.currentTimeMillis();
String result = concreteLogic.operation();
long endTime = System.currentTimeMillis();
long resultTime = endTime - startTime;
log.info("TimeDecorator 종료 resultTime={}ms", resultTime);
return result;
}
}
- ConcreteLogic 를 상속받아서 만든다.
Test
@Test
public void addProxy(){
ConcreteLogic concreteLogic = new ConcreteLogic();
TimeProxy timeProxy = new TimeProxy(concreteLogic);
ConcreteClient client = new ConcreteClient(timeProxy);
client.execute();
}
- ConcreteClient 의 생성자에 concreteLogic 이 아니라 timeProxy를 주입한다.
- ConcreteClient는 ConcreteLogic을 의존하는데, 다형성에 의해 ConcreteLogic에 concreteLogic 도 들어갈 수 있고, timeProxy 도 들어갈 수 있다
- ConcreteLogic에 할당할 수 있는 객체
- ConcreteLogic = concreteLogic (본인과 같은 타입을 할당)
- ConcreteLogic = timeProxy (자식 타입을 할당
- 참고: 자바 언어에서 다형성은 인터페이스나 클래스를 구분하지 않고 모두 적용된다. 해당 타입과 그 타입의 하위 타입은 모두 다형성의 대상이 된다. 자바 언어의 너무 기본적인 내용을 이야기했지만, 인터페이스가 없어도 프록시가 가능하다는 것을 확실하게 집고 넘어갈 필요가 있어서 자세히 설명했다
728x90
'스프링 핵심 원리(고급편)' 카테고리의 다른 글
| Ch04. 프록시 패턴과 데코레이터 패턴 - 인터페이스 기반 프록시와 클래스 기반 프록시 정리 (0) | 2022.04.10 |
|---|---|
| Ch04. 프록시 패턴과 데코레이터 패턴 - 구체 클래스 기반 프록시(적용) (0) | 2022.04.10 |
| Ch04. 프록시 패턴과 데코레이터 패턴 - 인터페이스 기반 프록시(적용) (0) | 2022.04.10 |
| Ch04. 프록시 패턴과 데코레이터 패턴 - 프록시 패턴과 데코레이터 패턴 정리 (0) | 2022.04.10 |
| Ch04. 프록시 패턴과 데코레이터 패턴 - 데코레이터 패턴 (0) | 2022.04.10 |