스프링/스프링 핵심 원리 - 고급편

23. 전략 패턴 인자로 받기

sdafdq 2024. 1. 17. 08:40

이전 까지는 미리 문맥 객체의 필드에 전략객체를 넣어 사용했다.

 

이번엔 아예 인자로 줄 것 이다.

 

이러면 코드가 훨씬 깔끔해 진다.

 

@Slf4j
public class ContextV2 {
    public void execute(Strategy strategy){
        long startTime = System.currentTimeMillis();

//        비즈니스 로직
        strategy.call();

        long endTime = System.currentTimeMillis();
        long resultTime = endTime - startTime;
        log.info("resultTime={}", resultTime);
    }
}

구현 자체는 이렇고,

 

@Test
void strategyV2(){
    ContextV2 context = new ContextV2();
    context.execute(()->log.info("비즈니스 로직 1"));
    context.execute(()->log.info("비즈니스 로직 2"));
}

이렇게 사용한다.

 

Strategy 인터페이스의 메소드는 하나이기 때문에, 저렇게 람다로 해도 인지가 된다.

 

@Test
void strategyV1(){
    ContextV2 context = new ContextV2();
    context.execute(new StrategyLogic1());
    context.execute(new StrategyLogic2());
}

당연히 이렇게 미리 구현해 놓은 구현체를 넣어줘도 된다.

 

 

디자인 패턴은 모양새가 비슷한 것이 많은데, 

구분은 하고자 하는 의도로 하면 된다.