strategy

업데이트:

스트래티지 패턴

  • 전략을 쉽게바꿀 수 있도록 해주는 디자인 패턴이다.
  • 전략이란 어떤 목적을 달성하기 위해 일을 수행하는 방식, 비즈니스 규칙, 문제를 해결하는 알고리즘 등으로 이해할 수 있다.
  • 같은 문제를 해결하는 여러 알고리즘이 클래스별로 캡슐화 되어 있고 이들이 필요할 때 교체할 수 있도록 함으로써 동일한 문제를 다른 알고리즘으로 해결할 수 있는 디자인 패턴이다.

패턴 수행 작업

Strategy

  • 인터페이스나 추상 클래스로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법을 명시한다.
  • 간단히 말해 기능을 인터페이스로 추상화 한 것으로 직접 호출이 된다. 실제 구현체는 DI를 통해 전략적으로 주입 받는다.

ConcreteStrategy1,ConcreteStrategy2,ConcreteStrategy3

  • 스트래티지 패턴에서 명시한 알고리즘을 실제로 구현한 클래스다.
  • 인터페이스의 구현체로 Strategy 변수가 선언된 곳에 전략적으로 주입되는 역활을 한다.

Context

  • 스트래티지 패턴을 이용하는 객체로 필요에 따라 동적으로 구체적인 전략을 바꿀 수 있도록 setter 메서드를 제공한다.
  • Strategy가 선언되어 있는곳으로 setter 메서드를 제공함으로써 클라이언트에서 전략적으로 구현체를 주입 가능하도록 한다.
  • 외부에서 구현체를 주입하고 인터페이스를 통해 실행하기 때문에 변경없이 기능 확장이 가능하다.

이전에 진행한 업무에서 json 파일을 받아서 작업하는 부분이 있었는데 총 3개의 타입으로 나눠 지는데 진행 프로세스는 동일하다. Json 이라는 추상 객체를 만들어 상속받아 타입을 정의하고 프로세스에서 진행되는 기능을 전략 패턴을 사용했으면 됐을텐데 그때 당시에는 전략패턴이라는 것도 모르고 당장 구현에 급급해서 모두 따로따로 만들었다. 지금와서 생각해 보니 아쉬운 부분이다.

댓글남기기