IT/JAVA
[JAVA] 스트레티지 패턴 (strategy pattern) 개념
윤재웅
2020. 4. 12. 12:10
스트레티지 패턴 개념
여러 알고리즘을 하나의 추상적인 접근점(인터페이스)을 만들어 접근점에서 알고리즘이 서로 교환 가능하도록 하는 패턴
- 동일 목적 알고리즘의 선택 적용 문제 예를 들면 불필요한 분기문 처리도 해결 할수 있습니다.
인터페이스
- 가능에 대한 선언(구현과의 분리)
- 여러가지 기능을 사용하기 위한 단일 통로
사용 예 :
- 워드 문서에서 프린터, 폰트 사용
프린터 제조사와 관계없이 프린트 가 가능하다. - 게임 케럭터의 무기(교체 후) 사용
무기 변경 검,도끼,활 변경에 따른 사용이 가능하다.
이제 코드로 확인해봅니다.
일반적으로 쓰이는 객체를 선언하여 메소드를 사용하는 방법입니다.
public class AObj {
public void SomeFunc() {
// 다음 기능을 수행합니다.
System.out.println("AAA");
System.out.println("AAA");
}
}
public class TestPattern {
public static void main(String[] args) {
AObj obj = new AObj();
// A의 기능을 호출
obj.SomeFunc();
}
}
mvc2 패턴과 유사하게 적용된 방법으로 strategy pattern으로 적용해봅니다.
public class TestPattern {
public static void main(String[] args) {
// 테스트
//BInterface binterface = new BImplement();
//binterface.funcA();
AObj obj = new AObj();
// A의 기능을 호출
obj.SomeFunc();
}
}
public class AObj {
BInterface binterface;
public AObj() {
binterface = new BImplement();
}
public void SomeFunc() {
// 다음 기능을 수행합니다.
//System.out.println("AAA");
//System.out.println("AAA");
// 위의 기능이 필요합니다. B님 만들어 주세요.
// 기능 구현을 위임. Delegate
binterface.funcA();
binterface.funcA();
}
}
public interface BInterface {
// 1.기능 선언
void funcA();
}
public class BImplement implements BInterface {
// 2.기능 구현
@Override
public void funcA() {
System.out.println("AAA");
}
}
전자 후자의 코드를 클래스다이어그램을 확인해보겠습니다.
전자
후자
간단하게 스트레티지 패턴에 대해서 알아보았습니다.