[목차]
1. Strategy Pattern - 전략 패턴이란?
2. 전략 패턴은 왜 사용하는 것일까?
3. 구현해보기 전에 알아보자!
4. 전략 패턴 구현방법(예제 활용)
5. 결론
| Strategy Pattern - 전략 패턴이란?
the strategy pattern (also known as the policy pattern) is a behavioral software design pattern that enables selecting an algorithm at runtime. Instead of implementing a single algorithm directly, code receives run-time instructions as to which in a family of algorithms to use.Strategy is one of the patterns included in the influential book Design Patterns by Gamma et al. that popularized the concept of using design patterns to describe how to design flexible and reusable object-oriented software. Deferring the decision about which algorithm to use until runtime allows the calling code to be more flexible and reusable. - Wikipedia
전략 패턴은 어떠한 알고리즘을 사용할 것인지 선택이 가능하게 하는 행위 패턴이며 이를 이용하여 보다 유연하고 재사용가능한 객체 지향 설계 방법입니다.
- 전략 패턴은 행위 패턴에 속하는 패턴입니다.
- 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 패턴입니다.
- 기능은 같지만 다른 전략을 가진 클래스들을 캡슐화하여 서로 교환이 가능하도록 하는 패턴입니다.
-> 여기서 전략이란, 어떠한 목적을 달성하기 위하여 일을 수행하는 방식, 알고리즘을 의미합니다. - 단계별로 살펴보겠습니다.
1. 특정한 계열의 알고리즘을 정의합니다.
2. 각 알고리즘을 캡슐화합니다.
3. 캡슐화한 알고리즘을 교체가 가능하도록 만듭니다.
| Strategy Pattern은 왜 사용하는 것일까?
- Strategy Pattern을 사용하면 이전보다 유지보수가 용이합니다.
- 새로운 전략을 추가할 때는 이전의 코드를 수정하지 않을 수 있으며 변화에도 대응이 쉽습니다.
- SOLID 원칙의 OCP(개방-폐쇄)원칙을 만족하기 때문에 확장을 할 때 편리합니다.
| 여기서 잠깐! 구현 방법을 보기 전에 이것만큼은 간략히 알고 가자!
전략 패턴을 직접 코드로 구현해보기 전에 구조와 앞서 말한 OCP 원칙에 대해서 잠깐 짚고 넘어가겠습니다. 전략 패턴의 구조는 이러한 형식이구나!라는 것을, OCP 원칙은 이러한 의미구나! 라는 것을 이해하면 충분합니다.
1. Strategy Pattern 구조
2. 객체지향설계 5대 원칙(SOLID)중 OCP(Open Close Principle) - 개방폐쇄 원칙
- OCP : 기존의 코드의 변경을 최소화 혹은 변경 하지 않으면서 기능을 추가할 수 있도록 설계해야 한다는 의미입니다.
| 전략 패턴의 구현 방법
- study()라는 메소드를 지니고 있는 인터페이스를 만들어 보겠습니다.
public interface StudyStrategy {
void study();
}
- 이번에는 StudyStrategy 인터페이스의 메소드를 재정의하는 클래스를 작성하겠습니다.
public class Korean implements StudyStrategy {
@Override
public void study() {
System.out.println("국어 공부해야지!");
}
}
public class Math implements StudyStrategy {
@Override
public void study() {
System.out.println("수학을 공부해보자!");
}
}
public class English implements StudyStrategy {
@Override
public void study() {
System.out.println("음.. 역시 영어를 먼저 공부하자!");
}
}
- 공부할 과목을 변경하는 클래스를 작성해보겠습니다.
public class Study {
private StudyStrategy studyStrategy;
public void setStudyStrategy(StudyStrategy studyStrategy) {
this.studyStrategy = studyStrategy;
}
public void decideSubject() {
if (studyStrategy == null) {
System.out.println("어떤 과목을 공부할까?");
} else {
studyStrategy.study();
}
}
- 마지막으로, 메인 메소드에서 결과를 확인해보도록 하겠습니다.
public class Main {
public static void main(String[] args) {
Study study = new Study();
study.decideSubject();
study.setStudyStrategy(new Korean());
study.decideSubject();
study.setStudyStrategy(new Math());
study.decideSubject();
study.setStudyStrategy(new English());
study.decideSubject();
}
}
- 출력 결과에도 보여지듯이, 전략을 자유롭게 바꿀 수 있습니다. 또한, 이후 기능의 확장 및 유지보수에도 보다 편리한 구조인 것을 알 수 있습니다.
- 다시 한번 클래스 다이어그램으로 확인해보겠습니다.
| Conclusion
Strategy Pattern이란?
- 전략 패턴이란, 어떠한 알고리즘 및 전략을 쉽게 바꿀수 있도록 하는 디자인 패턴입니다.
왜 Strategy Pattern을 사용하는가?
- 유지보수 및 기능 확장하기 좋습니다.
- SOLID 원칙에서 OCP원칙을 지킬 수 있습니다.
Strategy Pattern을 공부하며
- 최근에 작성했던 팩토리 메소드 패턴을 공부해서인지 전략 패턴을 이해하고 작성하는데 무리가 없었습니다. 그리고 팩토리 메소드 패턴을 공부했을 때와 마찬가지로 확실히 유지보수가 쉬울 것 같고 기능을 추가하는데도 편할 것 같다는 생각이 들었습니다. 추후, 프로젝트에 참여할 때 꼭 이 방식대로 작성하면 좋을 것 같습니다.
또한 어떠한 글을 읽는 중에 팩토리 메소드 패턴을 이해하기 위해서 전략 패턴을 우선 공부해야한다고 되어있던데... 그래서 그런지 이해하는 것이 쉬웠던 것 같습니다. 앞으로 남은 디자인 패턴들은 조금씩 조금씩 기존의 작성 템플릿에 맞춰서 작성을 해볼 예정입니다.
(참고)
'Develop > JAVA' 카테고리의 다른 글
DTO(VO), DAO , Entity에 대해서 알아보자! (0) | 2021.09.04 |
---|---|
Java 디자인 패턴 네번째 이야기 - 팩토리 메소드 패턴(Factory Method Pattern) (0) | 2021.08.16 |
Java 디자인 패턴 세번째 이야기 - 빌더 패턴(Builder Pattern) (0) | 2021.08.13 |
Java 디자인 패턴 두번째 이야기 - 프록시 패턴(Proxy Pattern) (0) | 2021.08.10 |
Java 디자인 패턴 첫번째 이야기 - 싱글톤 패턴(Singleton Pattern) (0) | 2021.08.07 |