1. 전략 패턴의 정의
- 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 '캡슐화 한 알고리즘'(so called 'strategy')을 컨텍스트안에서 바꿔주어 교체가 가능하게 하는 패턴.
- 행위를 직접 수정하는 것이 아닌, 전략을 바꿔지기만 하기에 유연하게 확장가능한 패턴.
- 유연하고 재사용 가능한 객체 지향 소프트웨어를 설계하기 위해 반복되는 디자인 문제를 해결.
- passport(Node.js에서 인증 모듈을 구현할 때 쓰는 미들웨어 라이브러리)가 전략 패턴을 활용.
(페이스북, 네이버 등 다른 서비스로 인증하는 OAuth Strategy와 서비스 내 회원가입 정보를 기반으로 인증하는 LovalStartegy를 지원.)
2. 전략패턴의 예시
public interface Movable {
public void move();
}
public class RailStrategy implements Movable{
public void move(){
System.out.println("Shipped by Railroad, 선로를 이용한 배송");
}
}
public class HighwayStategy implements Movable{
public void move(){
System.out.println("Shipped by Highway, 도로를 이용한 배송");
}
}
public class Moving {
private MovableStrategy movableStrategy;
public void move(){
movableStrategy.move();
}
public void setMovableStrategy(MovableStrategy movableStrategy){
this.movableStrategy = movableStrategy;
}
}
public class Bus extends Moving{}
public class Train extends Moving{}
public class Client {
public static void main(String args[]){
Moving train = new Train();
Moving bus = new Bus();
train.setMovableStrategy(new RailStartegy());
bus.setMovableStrategy(new HighwayStrategy());
train.move();
bus.move();
// 기차길을 따라 움직이는 버스를 개발
// 버스 객체가 고속도로만 고정적으로 다니는 것이 아니라 이 '객체의 행위' 를 바꿀 수 있고
// 이를 수정하기 위해 기존 소스를 고치는 것이 아니라 전략(캡슐화한 알고리즘)만 바꿔주면 됨.
bus.setMovable(new RailStartegy);
bus.move()
}
}
REFERNCE
https://ko.wikipedia.org/wiki/%EC%A0%84%EB%9E%B5_%ED%8C%A8%ED%84%B4
https://victorydntmd.tistory.com/292
도서 | 면접을 위한 CS 전공지식 노트
'Design Pattern' 카테고리의 다른 글
6. 프록시 패턴 (0) | 2022.10.24 |
---|---|
5. 옵저버 패턴 Observer Pattern (0) | 2022.10.20 |
3. 팩토리패턴 Factory Pattern (0) | 2022.10.20 |
2. 의존성 주입 (0) | 2022.10.19 |
1. 디자인 패턴 정의와 싱글톤 패턴 (0) | 2022.10.19 |