-
1. Strategy Pattern개발기초/Design Pattern 2020. 2. 24. 12:54
0. Strategy pattern?
- 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴
- 스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있습니다.
1. Strategy pattern을 구성하는 3대 요소
1) 전략 메서드를 가진 전략 객체
2) 전략 객체를 사용하는 컨텍스트(전략 객체의 사용자/소비자)
3) 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제3자, 전략 객체의 공급자)
2. Strategy Pattern 예제
(출처: https://limkydev.tistory.com/84)
Strategy.java (전략 인터페이스 정의)
public interface Strategy { void runStrategy(); }
StarategyGun.java (전략 인터페이스 구현1)
public class StrategyGun implements Strategy{ @Override public void runStrategy() { // TODO Auto-generated method stub System.out.println("탕! 타탕! 탕탕!"); } }
StrategyGrenade.java (전략 인터페이스 구현2)
public class StrategyGrenade implements Strategy{ @Override public void runStrategy() { // TODO Auto-generated method stub System.out.println("수류탄 투척~! 쾅!!!!"); } }
Solider.java(전략을 사용할 Context)
public class Solider { void runContext(Strategy strategy) { System.out.println("배틀 그라운드 시작"); strategy.runStrategy(); System.out.println("배틀 종료"); } }
Client.java (Client - 전략을 생성하고 컨텍스트에게 주입시키는 역할)
public class Client { public static void main(String[] args) { Strategy strategy = null; Solider rambo = new Solider(); strategy = new StrategyGun(); rambo.runContext(strategy); System.out.println("\n"); strategy = new StrategyGrenade(); rambo.runContext(strategy); } }
3. 요약 및 결론
1) 전략 인터페이스를 하나 정의하고 (=Strategy 인터페이스를 하나 정의하고)
2) 그 전략 인터페이스를 구현한 구현체를 여러개로 만들면 (=Strategy 인터페이스를 받아서 총도 만들고 수류탄도 만들면)
3) Client가 상황에 맞는 전략 구현체를 불러와서 전략을 실행시킬 수 있다. (Client의 선택에 따라 총도 쏠 수 있고, 수류탄도 던질 수 있다.)
'개발기초 > Design Pattern' 카테고리의 다른 글
0. 디자인 패턴에 대해 (0) 2020.02.20