본문 바로가기
SW 공부/Design Patterns

[디자인패턴] Strategy Pattern(전략패턴)

by 꼬냉상 2022. 8. 27.

Purpose of Strategy Pattern (전략패턴의 목적)

- Defines a set of encapsulated algorithms that can be swapped to carry out a specific behavior.

- 특정 동작을 수행하기 위해 스왑 할 수 있는 캡슐화된 알고리즘 집합을 정의

 

Design Principle (디자인원칙)

① Encapsulate what varies  : 변화하는 부분을 분리해서 캡슐화 

② Program to an interface, not an implementation : variation을 커버할 수 있는 인터페이스를 만듦
  → runtime에 concrete implemantation을 assign 해서 사용!

③ Favor composition over inheritance (or Composing Objects Principle) : 상속보다는 composition(구성) 선호!
  → 재사용/가변성을 생각할 때, interface를 통해 구현하면 object composition으로 delegation이 가능하다. 

  - object composition (객체 구성) : 다른 객체에 대한 reference를 가리키도록 선언

  - delegation (위임) : 해당 객체가 직접 처리할 수 있도록 맡겨버림

Design Basic

- Abstraction, Encapsulation, Polymorphism, Inheritance

 

Strategy Pattern (전략 패턴)

- strategy의 의미는 '전략', '전술' → 소프트웨어 개발에서 전략이나 전술은 알고리즘으로 구현한다. 

- Strategy 패턴은  Defines a family of algorithms, ( 알고리즘 패밀리를 정의하고 )
- Encapsulates each one, (각각 하나의 클래스로 캡슐화하고)
- And makes them interchangeable (그것들을 필요할 때 서로 교환해서 사용할 수 있게 만들면 됨)

 

→ 이 패턴은 컨텍스트(context) 개체 코드 내에 있는 많은 조건문들(conditional statements)에 대안을 제공한다. 해당 패턴과 관련된 객체들 내부에 다양한 행위(behavior)들을 캡슐화(encapsulation)함으로써, context 객체가 행위를 바꾸고자 할 때 단지 해당 행위를 수행해주는 객체를 변경하는 방식으로 동작한다.

 

Strategy Pattern lets the algorithm vary independently from clients that use it.

전략 패턴을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 변경할 수 있습니다.

 

 Quiz ) 다음 구성요소를 strategy pattern에 맞게 정리하시오.

① Arrange the classes.

② Identify one abstract class, one interface and eight classes.

③ Draw arrows between classes.

  a. Draw this kind of arrow for inheritance(“extends”).

  b. Draw this kind of arrow for interface(“implements”).

  c. Draw this kind of arrow for “HAS-A”.

④ Put the method setWeapon() into the right class.

void setWeapon (WeaponBehavior w) {
    this.weapon = w;
}

⑤ Fill the method fight() in Character class

 

Quiz) 다음 설명에 대한 패턴의 이름으로 가장 적절한 것은?

 이 패턴은 컨텍스트(context) 개체 코드 내에 있는 많은 조건문들(conditional statements)에 대안을 제공한다. 해당 패턴과 관련된 객체들 내부에 다양한 행위(behavior)들을 캡슐화(encapsulation)함으로써, context 객체가 행위를 바꾸고자 할 때 단지 해당 행위를 수행해주는 객체를 변경하는 방식으로 동작한다.

Strategy Pattern (전략패턴)

 

Quiz) 전략(Strategy) 패턴에서 객체 합성(Object Composition)과 위임(Delegation)이 어떻게 이용되는지 Java, C++ 등을 이용하여 예제 코드를 간략히 제시하시오.

interface Strategy {
    public void act1();
    public void act2();
    public void act3();
}

class StrategyA implements Strategy {
    public void act1() {
        //...
    }
    public void act2() {
        //...
    }
    public void act3() {
        //...
    }
}

Quiz) 다음 설명에 적합한 패턴은?

"이번에 맡은 프로젝트는 보안 시스템을 개발하는 것이다. 보안 시스템의 핵심으로 암호화 알고리즘이 사용된다.
시스템을 설계할 때 고려해야 될 사항으로는 각 인증기관에 따라 서로 다른 암호화 알고리즘을 사용해야 되며, 또 기술의 발전에 따라 알고리즘을 교체하여야 한다는데 있다."

=> Strategy Pattern (전략 패턴)

 

본 글은 개인의 S/W 구조설계 역량 강화를 위한 학습 목적으로 정리된 내용입니다.
일부 타/개인 단체에 저작권이 있는 자료를 포함하고 있으므로, 절대 영리 목적으로 사용하실 수 없습니다.
반응형

댓글