스트래티지 Strategy
🙉

스트래티지 Strategy

Created
Apr 25, 2024 04:08 AM
Last edited time
Last updated April 25, 2024
Tags
CS
Language
URL

Intro::

디자인 패턴 중 행위 패턴인 스트래티지에 대해 알아봅시다.
 

스트래티지 패턴이란?

💡
스트래티지(Strategy) 패턴은 행위 디자인 패턴 중 하나로, 알고리즘을 객체의 일부분으로 만들어서, 실행 중에 알고리즘을 쉽게 바꿀 수 있도록 해주는 패턴입니다. 즉, 객체의 행동 또는 메서드에 대한 결과를 동적으로 변경할 수 있게 하는 디자인 패턴입니다. 이 패턴은 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있게 해 줍니다.
 

장점

  1. 교체 가능성: 실행 중에 Strategy를 쉽게 교체할 수 있습니다.
  1. 확장성: 새로운 Strategy를 추가하거나 기존 것을 변경하는 것이 용이합니다.
  1. SOLID 원칙 지원: Strategy 패턴은 개방-폐쇄 원칙과 의존성 역전 원칙을 지원하여, 코드 변경 없이도 기능 확장이 가능하게 합니다.
  1. 재사용성: Strategy를 다른 문맥에서 재사용할 수 있습니다.
 

단점

  1. 복잡도 증가: 알고리즘을 클래스로 분리하면 코드 구조가 복잡해질 수 있습니다.
  1. 클라이언트 코드 변경: 클라이언트가 Strategy 객체를 생성하고 설정해야 하므로 코드가 더 복잡해질 수 있습니다.
 

코드 예시

// Strategy 인터페이스 interface MoveStrategy { void move(); } // 구체적인 Strategy 구현체 class WalkingStrategy implements MoveStrategy { @Override public void move() { System.out.println("걷고 있습니다."); } } class FlyingStrategy implements MoveStrategy { @Override public void move() { System.out.println("날고 있습니다."); } } // Context 클래스 class Animal { private MoveStrategy moveStrategy; public Animal(MoveStrategy moveStrategy) { this.moveStrategy = moveStrategy; } public void move() { moveStrategy.move(); } public void setMoveStrategy(MoveStrategy moveStrategy) { this.moveStrategy = moveStrategy; } } // 실행 클래스 public class Main { public static void main(String[] args) { Animal bird = new Animal(new FlyingStrategy()); Animal dog = new Animal(new WalkingStrategy()); bird.move(); dog.move(); // 전략 변경 bird.setMoveStrategy(new WalkingStrategy()); bird.move(); } }
 

References::

Loading Comments...