본문 바로가기

스프링

[Spring] 디자인 패턴 - 전략 패턴 개선하기

참고 1. 스프링-핵심-원리-고급편, 김영한

 

이전 전략 패턴은 아래와 같이 새로운 Strategy마다 Context를 새로 생성해야 했다.

Strategy strategy1 = new Strategy();
Context context1 = new Context(strategy1);	//Context1 생성
context1.execute();

Strategy strategy2 = new Strategy();
Context context2 = new Context(strategy2);	//Context2 생성
context2.execute();

 

이번에는 Context의 Strategy를 생성자 주입이 아닌 파라미터로 주입받는 방법으로 개선해보자. 이렇게 파라미터 방식으로 주입받을 경우 각 Strategy마다 새로운 Context를 생성하지 않고, 하나의 Context에 각 Strategy를 파라미터로 주입해 재상용할 수 있다.

Context 정의

public class ContextV2 {
    public void execute(Strategy strategy) {
        System.out.println("start");
        strategy.call(); 
        System.out.println("end");
    }
}

사용 예시

void strategy() {
    Context context = new Context();
    context.execute(new Strategy1());
    context.execute(new Strategy2());
   	
    //Lambda 예시
    context.execute(() -> {
    	System.out.println("Logic~");
    } 
}