[디자인패턴] - Strategy

leehyunjon·2022년 11월 16일
0

Java

목록 보기
3/7
post-thumbnail

전략 패턴이란

전략 패턴이란, 옵션마다의 행동을 캡슐화하여 인터페이스를 정의하고, 독립적이고 상호 교환가능하도록 만드는 패턴입니다.

예를 들어, CoffeeMachine을 이용해 Coffee를 받으려고할때 Americano와 CafeLatte를 받을 수 있습니다.

public class CoffeMachine{
    
    public brewAmericano(){
    	Americano americano = new Americano();
        return americano.brew();
    }
    
    public brewCafeLatte(){
    	CafeLatte cafeLatte = new CafeLatte();
        return cafeLatte.brew();
    }
}

이와같이 직접적으로 Americano와 CafeLatte를 의존한다면 새로운 커피종류가 추가되었을 경우 CoffeMachine에 새로운 커피종류를 추가해야하기때문에 OOP원칙에서 개방폐쇄원칙을 위반하게 됩니다.

public Integerface CoffeeStrategy{
	String brew();
}

public class AmericanoStrategy implements CoffeeStrategy{
	public String brew(){
			return "아메리카노";
		}
}

public class CafeLatteStrategy implements CoffeeStrategy{
	public String brew(){
			return "카페라떼";
		}
}

public class CoffeeMachine{
	CoffeeStrategy coffeeStrategy;
		public CoffeeMachine(){};

		public String brew(CoffeeStrategy coffeeStrategy){
			this.coffeeStrategy = coffeeStrategy;
			return coffeeStrategy.brew();
		}
}

public class CoffeeMachineButton{
	public CoffeeMachineButton(){};
		public CoffeeStrategy americanoButton(){
			return new AmericanoStrategy();
		}

		public CoffeeStrategy cafeLatteButton(){
			return new CafeLatteStrategy();
		}
}

public class Client{
	public static void main(String[] args){
    	CoffeeMachine coffeeMachine = new CoffeeMachine();
		CoffeeMachineButton coffeeMachineButton = new CoffeeMachineButton();

		String americano = coffeeMachine.brew(coffeeMachineButton.americanoButton());
		System.out.println(americano);
		String cafeLatte = coffeeMachine.brew(coffeeMachineButton.cafeLatteButton());
		System.out.println(cafeLatte);
    }
}

이와 같이 커피 종류를 선택하는 전략을 캡슐화하여 인터페이스(CoffeeStrategy)를 정의하여 새로운 커피 종류가 추가되어도 내부적으로 수정하지 않고 커피 종류를 추가할 수 있습니다.


Reference

https://victorydntmd.tistory.com/292

https://www.youtube.com/watch?v=lJES5TQTTWE

profile
내 꿈은 좋은 개발자

0개의 댓글