만들어가는 세상

[JAVA] 스트레티지 패턴 (strategy pattern) 개념 본문

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");
    }
}

전자 후자의 코드를 클래스다이어그램을 확인해보겠습니다.

전자

후자

간단하게 스트레티지 패턴에 대해서 알아보았습니다.

Comments