전략 패턴 - 파라미터

박찬우·2024년 2월 12일

스프링

목록 보기
35/88

전략 패턴 - 파라미터

  • 기존 전략 패턴은 Context 와 Strategy 를 조립한 이후에는 전략을 변경하기가 번거롭다는 점이 있었다
  • 파라미터를 활용하면 Context 를 실행하는 시점에 원하는 Strategy 를 전달할 수 있다
  • 원하는 전략을 더욱 유연하게 변경할 수 있다
@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);
    }
}
@Slf4j
public class ContextV2Test {

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

    @Test
    void strategyV2() {
        ContextV2 context = new ContextV2();

        context.execute(new Strategy() {
            @Override
            public void call() {
                log.info("비즈니스 로직1 실행");
            }
        });

        context.execute(new Strategy() {
            @Override
            public void call() {
                log.info("비즈니스 로직2 실행");
            }
        });
    }

    // 람다 사용
    @Test
    void strategyV3() {
        ContextV2 context = new ContextV2();

        context.execute(() -> log.info("비즈니스 로직1 실행"));
        context.execute(() -> log.info("비즈니스 로직2 실행"));
    }
}

기존과의 차이점

  • ContextV1 은 필드에 Strategy 를 저장하는 방식으로 전략 패턴을 구사했다.
    • 선 조립, 후 실행 방법에 적합하다.
    • Context 를 실행하는 시점에는 이미 조립이 끝났기 때문에 전략을 신경쓰지 않고 단순히 실행만 하면 된
      다.
  • ContextV2 는 파라미터에 Strategy 를 전달받는 방식으로 전략 패턴을 구사했다.
    • 실행할 때 마다 전략을 유연하게 변경할 수 있다.
    • 단점 역시 실행할 때 마다 전략을 계속 지정해주어야 한다는 점이다.
profile
진짜 개발자가 되어보자

0개의 댓글