본문 바로가기
🎨 디자인 패턴

전략 패턴

by 시마이 2024. 5. 23.

여러 클래스에서 반복되는 로직이지만, 로직의 일부분만 클래스별로 다르게 처리해야 할 때 사용하는 디자인 패턴.

템플릿 메서드 패턴과 기능은 유사하지만 아래와 같은 차이점이 있다.

 

 

 

🆚 템플릿 메서드 패턴

디자인 패턴 변하지 않는 로직 변하는 로직
템플릿 메서드 패턴 부모클래스 자식클래스
전략 패턴 클래스, Context로 표현 인터페이스 구현 클래스, Strategy로 표현

 

 

 

  • 인터페이스
  • 다형성
  • 오버라이딩

 

 

 

1. Strategy 인터페이스를 구현한 클래스를

2. Context 메서드의 파라미터로 전달하고

3. Context 메서드 내부에서 실행

 

 

 

🏭 전략 패턴 구현

1. Strategy

public interface Strategy {
     void call();
}

2. Strategy Implements

public class StrategyLogic1 implements Strategy {
    @Override
    public void call() {
        // 비즈니스 로직 실행
    }
}

3. Context Class

public class Context {

    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 strategy() {
    Context context = new Context();
    
    context.execute(new Strategy() {
        
        @Override
        public void call() {
            // 비즈니스 로직1 실행
        }
    });
}

 

 

 

Context는 Strategy 인터페이스에만 의존하기 때문에 Strategy의 구현체를 변경해도 Context 코드에 영향을 주지 않는다.

 

 

 


 

스프링 핵심 원리 - 고급편 | 김영한 - 인프런

김영한 | 스프링의 핵심 원리와 고급 기술들을 깊이있게 학습하고, 스프링을 자신있게 사용할 수 있습니다., 핵심 디자인 패턴, 쓰레드 로컬, 스프링 AOP스프링의 3가지 핵심 고급 개념 이해하기

www.inflearn.com