본문 바로가기

Design Pattern

4. 전략패턴 Strategy Pattern

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