티스토리 뷰

Study

[Design Pattern] 전략 패턴

hyuuny 2022. 5. 8. 20:10

전략 패턴

GOF에서는 전략 패턴을 "알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만들자. 전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다"고 말한다.


이전에 템플릿 메서드 패턴은 부모 클래스에 변하지 않는 템플릿을 두고, 변하는 부분을 자식 클래스에 두어서 상속을 사용해서 문제를 해결했다.


전략 패턴은 변하지 않는 부분을 Context라는 곳에 두고, 변하는 부분을 Strategy라는 인터페이스를 만들고 해당 인터페이스를 구현하도록 해서 문제를 해결한다. 상속이 아니라 위임으로 문제를 해결하는 것이다.


이번에도 이해를 돕기 위해 요리사들의 요리 시작부터 완성하기까지의 시간을 측정해야 한다고 가정해보고, 전략 패턴을 적용하여 구현해보자.


전략 패턴 적용

@Slf4j
public class Context {

  private Strategy strategy;

  public Context(Strategy strategy) {
    this.strategy = strategy;
  }

  public void execute() {
    long startTime = System.currentTimeMillis();

    // 비지니스 로직 실행
    strategy.call(); // 위임
    // 비지니스 로직 종료

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

}

public interface Strategy {

  void call();

}

@Slf4j
public class KoreanChef implements Strategy{

  @Override
  public void call() {
    log.info("한식 요리 시작 !");
  }

}

@Slf4j
public class ChineseChef implements Strategy{

  @Override
  public void call() {
    log.info("중식 요리 시작 !");
  }

}

  /**
   * 전략 패턴 적용
   */
  @Test
  void strategyV1() {
    KoreanChef koreanChef = new KoreanChef();
    Context koreanChefContext = new Context(koreanChef);
    koreanChefContext.execute();

    ChineseChef ChineseChef = new ChineseChef();
    Context chineseChefContext = new Context(ChineseChef);
    chineseChefContext.execute();
  }

결과


Reference

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

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B3%A0%EA%B8%89%ED%8E%B8#

'Study' 카테고리의 다른 글

[자료구조] Linked List  (0) 2022.07.31
[Design Pattern] 템플릿 콜백 패턴  (0) 2022.05.09
[Design Pattern] 템플릿 메서드 패턴  (0) 2022.05.08
[Refactoring] 기본형 집착  (0) 2022.03.19
[Refactoring] 산탄총 수술  (0) 2022.03.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함