22.02.20_전략패턴-패턴소개
본문 바로가기
CS Study/디자인패턴

22.02.20_전략패턴-패턴소개

by KyeongMin 2022. 2. 20.
728x90
반응형
  • 은연중에 많이쓰는 것
  • 프레임워크에서 많이 표현해서 씀
  • 어떤 일을 수행하는 방법이 여러개일때, 그 여러 알고리즘 각 개별적인 클래스로 캡슐화하고
    • 그 캡슐화한것을 공통된 인터페이스로 추상화해서 로직을 수행하는 곳에서는 추상화된 인터페이스만 사용함으로써 코드는 바뀌지 않지만 사용하는 알고리즘을 바꿔서 끼어넣을 수 있게 하는 것
  • 자바 개발자에게 제일 많이 보이는것 compareater 인터페이스 있는데
    • 이게 대표적인 전략 패턴, 우리가 그 인터페이스의 구현체를 제공해 주는것이 concreate 전략을 만들어주는과정으로 볼 수 있음

01.소스코드

  • Client
  • public class Client{
        
        public static void main(String[] args){
            BlueLightRedLight blueLightRedLight = new BlueLightRedLight(1);
            blueLightRedLight.blueLight();
            blueLightRedLight.redLight();
        }
    }
  • BlueLightRedLight
  • public calss BlueLightRedLight{
        
        private int speed;
        
        public BlueLightRedLight(int speed){
            this.speed = speed;
        }
        
        public void blueLight(){
            if(speed==1){
    			System.out.println("무 궁 화    꽃    이");
            }else if(speed == 2)
            {
             	System.out.println("무궁화꽃이");
            }else
            {
             	System.out.println("무광꼬치");
            }
        }
        
      	public void redLight(){
            if(speed==1){
            	System.out.println("피 었 습 니  다.");
            }else if(speed==2){
            	System.out.println("피었습니다.");
            }else
            {
             	System.out.println("폈슴돠");
            }
        }
    }
  • 위에 처럼 속도를 달리할 수 있는 기능이 있다고 가정할 때
  • 이렇게 코드를 작성하는 경우가 있다 if else를 이용해서 분기하는것
  • 위와 같은 것을 전략패턴을 이용하여 기존 코드를 건들이지 않고 할 수 있음

  • Context는 원래 사용하던거 였는데 상황에 따라 달라지는 전략을 staregy 인터페이스로 뽑아내는것
  • 중요한것은 인터페이스로 빼야함
    • 그래야 상호 교환 가능한 여러가지 전략을 바꿔서 껴넣을 수 있음
  • ConcreateStrategy
    • Strategy의 구현체이고 각각의 알고리즘을 해당 스트레트지 내에서 구현한 것
    • 클라이언트 직접 사용한 strategy를 선택해서 Context를 만들때
      • Context의 어떤 operation을 적용할 때 넣어 줄 수 있음
    • 즉, 생성자에 넣어줄수 있고, 특정한 operation을 실행할 때 넣어줄 수 있음
  • 여기서 context는 blueLight, redLight에 해당
  • 각각의 빠르기가 전략에 해당

https://github.com/3DPIT/study/blob/master/05.%EC%BD%94%EB%94%A9%EC%9C%BC%EB%A1%9C%ED%95%99%EC%8A%B5%ED%95%98%EB%8A%94GoF%EC%9D%98%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/03.%ED%96%89%EB%8F%99%EA%B4%80%EB%A0%A8%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/09.%EC%A0%84%EB%9E%B5%ED%8C%A8%ED%84%B4/01.%ED%8C%A8%ED%84%B4%EC%86%8C%EA%B0%9C/22.02.20_%EC%A0%84%EB%9E%B5%ED%8C%A8%ED%84%B4-%ED%8C%A8%ED%84%B4%EC%86%8C%EA%B0%9C.md

 

728x90
반응형

댓글