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 |
---|