Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- pointcut
- springdatajpa
- 백준
- Exception
- 그리디
- QueryDSL
- AOP
- 스프링 핵심 원리
- JDBC
- 인프런
- db
- http
- transaction
- Spring Boot
- 김영한
- 스프링
- spring
- SpringBoot
- 자바
- 스프링 핵심 기능
- jpa
- JPQL
- Servlet
- Android
- java
- Greedy
- Proxy
- Thymeleaf
- kotlin
- 알고리즘
Archives
- Today
- Total
개발자되기 프로젝트
Decorator Pattern 2 본문
1. 부가기능 추가
- 앞서 설명한 것 처럼 프록시를 통해서 할 수 있는 기능은
크게 접근 제어와 부가 기능 추가라는 2가지로 구분한다. - 앞서 프록시 패턴에서 캐시를 통한 접근 제어를 알아보았다.
- 이번에는 프록시를 활용해서 부가기능을 추가해보자.
- 이렇게 프록시로 부가 기능을 추가하는 것을 데코레이터 패턴이라 한다.
- 데코레이터 패턴: 원래 서버가 제공하는 기능에 더해서 부가 기능을 수행한다.
- 예) 요청 값이나, 응답 값을 중간에 변형한다.
- 예) 실행 시간을 측정해서 추가 로그를 남긴다.
2. 응답 값을 꾸며주는 데코레이터
- 응답 값을 꾸며주는 데코레이터 프록시를 만들어보자.
3. Decorator
- MessageDecorator의 역햘은 Component에서 받은 결과의 앞뒤에 ***을 붙여서 반환하는 것.
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class MessageDecorator implements Component{
private Component component;
public MessageDecorator(Component component) {
this.component = component;
}
@Override
public String operation() {
log.info("MessageDecorator 실행");
String result = component.operation();
String decoResult = "***" + result + "***";
log.info("MessageDecorator 꾸미기 적용 : {} --> {}", result, decoResult );
return decoResult;
}
}
4. Test
- Client는 결국 Component에만 항상 의존하고,
- 구현체로 뭐를 사용하느냐에 따라 결과가 달라짐.
- MessageDecorator는 realComponent의 결과의 앞뒤에 ***추가함.
- client가 사용할 Component로 messageDecorator 주입.
@Test
void decorator1(){
Component realComponent = new RealComponent();
Component messageDecorator = new MessageDecorator(realComponent);
DecoratorPatternClient client = new DecoratorPatternClient(messageDecorator);
client.execute();
}
22:57:16.487 [main] INFO hello.proxy.pureproxy.decorator.code.MessageDecorator - MessageDecorator 실행
22:57:16.489 [main] INFO hello.proxy.pureproxy.decorator.code.RealComponent - Real Component 실행
22:57:16.498 [main] INFO hello.proxy.pureproxy.decorator.code.MessageDecorator - MessageDecorator 꾸미기 적용 : data --> ***data***
22:57:16.500 [main] INFO hello.proxy.pureproxy.decorator.code.DecoratorPatternClient - result=***data***
5.GitHub : 211228 Decorator Pattern 2
'인프런 > [인프런] 스프링 핵심 원리 - 고급' 카테고리의 다른 글
Decorator Pattern 3 - chain (0) | 2021.12.28 |
---|---|
Decorator Pattern 3 - chain (0) | 2021.12.28 |
Decorator Pattern - 1 (0) | 2021.12.28 |
Proxy Pattern - 예제코드 2 (0) | 2021.11.23 |
Proxy Pattern - 예제코드 1 (0) | 2021.11.23 |
Comments