본문 바로가기

디자인패턴

[디자인패턴] Strategy(전략) 패턴 (Feat.Java)

728x90
반응형
SMALL

Strategy Pattern (전략 패턴) 이란?

  • 전략 패턴은 정책 패턴 (Policy Pattern) 이라고도 하며, 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴 - [면접을 위한 CS전공 지식 책 설명]
  • 프로그램이 실행 중에 객체의 동작을 실시간으로 바꾸도록 할 수 있는 행위 디자인 패턴
  • 어떤 객체가 여러 일이 가능 했으면 좋겠다고 생각했을 때, 미리 전략을 정의해서 전략을 교체할 수 있는 경우에 적합한 패턴

예시

interface SearchStrategy {
    void search();
}

// 전략 패턴에서는 전략을 담을 통이 필요하다!
class Context {
    SearchStrategy ss;
    void setSs(SearchStrategy ss){
        this.ss = ss;
    }
    void getStrategywork(){
        this.ss.search();
    }
}

class SearchALL implements SearchStrategy{
    @Override
    public void search() {
        System.out.println("ALL");
    }
}

class SearchYoutue implements SearchStrategy {
    @Override
    public void search() {
        System.out.println("Youtube");
    }
}
class SearchInsta implements SearchStrategy {
    @Override
    public void search() {
        System.out.println("Insta");
    }
}
  • 예전에 프로젝트를 하면서 어떤 버튼을 누르면 그 키워드에 맞는 동작을 하게끔 만들고 싶었는데 그때 전략 패턴을 알았다면 이런식으로 사용 할 수 있었지 않았을까 하는 마음에서 예시를 들어보았다.
  •  interface SearchStrategy 는 공통적으로 검색이라는걸 하는 동작
  • 다른 class들은 각각의 search() 메소드들을 자기 나름의 방식으로 처리하고 있다.
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Context ct = new Context();
            System.out.println("=".repeat(10));
            System.out.println("검색 하기!");
            System.out.println("1 모두 검색");
            System.out.println("2. 유튜브 검색");
            System.out.println("3. 인스타 검색");
            System.out.println("=".repeat(10));
            System.out.print("입력하세요 : ");
            int choice = sc.nextInt();
            sc.nextLine();
            switch (choice) {
                case 1:
                    ct.setSs(new SearchALL());
                    break;
                case 2:
                    ct.setSs(new SearchYoutue());
                    break;
                case 3:
                    ct.setSs(new SearchInsta());
                    break;
                default:
                    System.out.println("Wrong Input");
            }

            ct.getStrategywork();   //search();
        }
    }
728x90
반응형
LIST

'디자인패턴' 카테고리의 다른 글

[디자인패턴] Singleton 패턴 (Feat.Java)  (0) 2024.02.13