Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

Decorator Pattern 2 본문

인프런/[인프런] 스프링 핵심 원리 - 고급

Decorator Pattern 2

Seung__ 2021. 12. 28. 23:04

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


 

GitHub - bsh6463/Spring_Advanced_2

Contribute to bsh6463/Spring_Advanced_2 development by creating an account on GitHub.

github.com

 

'인프런 > [인프런] 스프링 핵심 원리 - 고급' 카테고리의 다른 글

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