반응형
4.1 전략 패턴이란?
전략 패턴이란?
같은 기능이지만 서로 다른 전략을 가진 클래스들을 각각 캡슐화하여 상호교환할 수 있도록 하는 패턴
전략 패턴은 정책 패턴이라고도 한다.
객체의 행위를 바꾸고 싶은 경우 '직접' 수정하지 않고, 전략이라 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만든 패턴이다.
// 커피를 뽑는 전략 인터페이스
interface CoffeeStartegy {
public void brew();
}
// 아메리카노 전략 클래스
class AmericonoStrategy implements CoffeeStartegy {
private String americano = "아메리카노";
@Override
public void brew() {
// 아메리카노를 뽑음
return americano;
}
}
// 라떼 전략 클래스
class LatteStrategy implements CoffeeStartegy {
private String = "라떼";
@Override
public void brew() {
// 라떼를 뽑음
return latte;
}
}
// 커피머신
public class CoffeeMachine {
public String brew(CoffeeStrategy coffeeStrategy) {
return coffeeStrategy.brew();
}
}
// 아메리카노를 추출하는 버튼
public static CoffeStrategy americanoButton() {
return new AmericanoStrategy();
}
// 라떼를 추출하는 버튼
public static CoffeStrategy latteButton() {
return new LatteStrategy();
}
public class Test {
public static void main(String[] args) {
CoffeeMachine coffeemachine = new CoffeeMachine();
String americano = coffeeMachine.brew(americanoButton());
System.out.println(americano);
String latte = coffeeMachine.brew(latteButton());
System.out.println(latte);
}
}
4.2 전략패턴의 장점
1. 유지보수가 수월하다.
새로운 기능을 추가하고 싶을 때, 클래스를 수정할 필요없이 새로운 전략을 생성하면 된다.
원하는 기능을 A, B, C.. 추가하면 되는 것이다.
즉, 확장성이 좋고, 알고리즘을 변경하기 매우 수월하다.
2. 상속대신 위임을 사용할 수 있다.
상속은 단 한 개의 클래스만 상속할 수 있기에, 나중에 진짜 상속해야할 클래스가 생길 때 상속을 받지 못하는 불상사가 일어날 수 있다. 또한, 상위 클래스가 바뀌면 하위 클래스들도 모조리 영향을 받기에, 종속성 측면에서 단점이 존재한다.
하지만, 위임을 사용하게 될 경우, 해당 컨텍스트 클래스가 변경될지라도 전략 영역에는 영향을 받지 않으므로 전략패턴을 사용하면 상속의 단점을 보완할 수 있다.
반응형
'공부 > 면접을 위한 CS 전공지식 노트' 카테고리의 다른 글
[CS스터디/네트워크] TCP와 UDP의 특징과 차이 (2) | 2022.12.20 |
---|---|
[CS 스터디/디자인패턴] 5. 옵저버 패턴(Observer Pattern) (0) | 2022.12.14 |
[CS 스터디/디자인패턴] 3. 팩토리 패턴(Factory Pattern) (0) | 2022.12.14 |
[CS 스터디/디자인 패턴] 2. 싱글톤 패턴(Sigleton Pattern) (0) | 2022.12.14 |
[CS 스터디/디자인 패턴] 1. 디자인 패턴이란? (0) | 2022.12.14 |