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 구조설계 역량 강화를 위한 학습 목적으로 정리된 내용입니다.
일부 타/개인 단체에 저작권이 있는 자료를 포함하고 있으므로, 절대 영리 목적으로 사용하실 수 없습니다.
'SW 공부 > Design Patterns' 카테고리의 다른 글
[디자인패턴] Template method pattern (템플릿 메소드 패턴) (2) | 2022.08.28 |
---|---|
[디자인패턴] Observer Pattern(옵저버 패턴) (2) | 2022.08.27 |
GRASP (GENERAL RESPONSIBILITY ASSIGNMENT SOFTWARE PATTERNS) (2) | 2022.08.24 |
SOLID PRINCIPLES (2) | 2022.08.23 |
OBJECT-ORIENTED PARADIGM (4) | 2022.08.23 |
댓글