디자인 패턴 (전략 패턴) strategy pattern 개념과 예제
Strategy pattern이란 ?
▶ 같은 종류의 작업을 하는 알고리즘을 정의, 각 알고리즘을 캡슐화, 그리고 알고리즘들을 서로 바꿔 사용할 수 있도록 한다. 스트래티지 패턴은 알고리즘을 사용하는 클라이언트로부터 독립적으로 알고리즘을 바꿔서 적용시킬 수 있도록 합니다.
정의만 본다면 무슨 뜻인지 잘 이해가 가지 않을 수 있습니다. 바로 코드와 클래스 다이어그램으로 알아보겠습니다.
사람은 계산기를 사용하고 계산기의 종류는 총 2가지 입니다. 덧셈을 진행하는 계산기와 뺄셈을 진행하는 계산기입니다. strategy pattern을 적용한 형태입니다. operate()를 호출해서 calculator의 execute()를 실행합니다. 계산기의 역할에 따라 set을 이용해서 바꿔줍니다.
1. Calculator interface
public interface Calculator {
double execute(double n1, double n2);
}
2. PlusCalculator class
public class PlusCalculator implements Calculator{
@Override
public double execute(double n1, double n2) {
return n1+n2;
}
}
3. class MinusCalculator
public class MinusCalculator implements Calculator{
@Override
public double execute(double n1, double n2) {
return n1-n2;
}
}
▶ PlusCalculator와 MinusCalculator은 Calculator를 상속받아 각자의 알고리즘을 구현합니다.
4. People class
public class People {
private Calculator calculator;
private double n1;
private double n2;
public double operate(){
return calculator.execute(n1,n2);
}
public void setCalculator(Calculator calculator){
this.calculator=calculator;
}
void changeNumber(double n1, double n2) {
this.n1 = n1;
this.n2 = n2;
}
}
▶ setCalculator()을 이용해서 원하는 계산기로 바꿀 수 있습니다.
5. Main class
public class Main {
public static void main(String[] args) {
People people = new People();
// 숫자 설정
people.changeNumber(1,2);
// Calculator 설정
people.setCalculator(new PlusCalculator());
double result1 = people.operate();
System.out.println(result1);
// 새로운 Calculator 설정
people.setCalculator(new MinusCalculator());
double result2 = people.operate();
System.out.println(result2);
}
}
▶실행 결과
함수를 오버라이딩하여 필요한 구현체를 사용하는 패턴입니다.
인터페이스가 가지고 있는 함수가 1가지일 경우 람다로 표현할 수 있습니다.
// 람다 PlusCalculator
people.setCalculator((n1,n2)->{
return n1+n2;
});
double result3 = people.operate();
System.out.println(result3);
// 람다 MinusCalculator
people.setCalculator((n1,n2)->{
return n1-n2;
});
double result4 = people.operate();
System.out.println(result4);
같은 결과가 나오는 것을 볼 수 있습니다.
6. lamda 바꾼 main class
public class Main {
public static void main(String[] args) {
People people = new People();
// 숫자 설정
people.changeNumber(1,2);
// Calculator 설정
people.setCalculator(new PlusCalculator());
double result1 = people.operate();
System.out.println(result1);
// 새로운 Calculator 설정
people.setCalculator(new MinusCalculator());
double result2 = people.operate();
System.out.println(result2);
// 람다 PlusCalculator
people.setCalculator((n1,n2)->{
return n1+n2;
});
double result3 = people.operate();
System.out.println(result3);
// 람다 MinusCalculator
people.setCalculator((n1,n2)->{
return n1-n2;
});
double result4 = people.operate();
System.out.println(result4);
}
}
지금까지 strategy pattern(전략패턴)을 알아보았습니다. 다음은 옵저버 패턴을 포스팅하겠습니다. 감사합니다.
전체 코드는 아래에서 확인 가능합니다:)
https://github.com/rlaehdals/design-pattern
'Desing Pattern' 카테고리의 다른 글
디자인 패턴 DAO Pattern 개념과 예제 (0) | 2022.01.01 |
---|---|
디자인 패턴 (싱글톤 패턴) Singleton Pattern 개념과 예제 (0) | 2021.12.31 |
디자인 패턴 Factory Pattern 개념과 예제 (0) | 2021.12.30 |
디자인 패턴 (데코레이터 패턴) Decorator Pattern 개념과 예제 (0) | 2021.12.30 |
디자인 패턴 observer pattern(옵저버 패턴) 개념과 예제 (0) | 2021.12.30 |
댓글
이 글 공유하기
다른 글
-
디자인 패턴 (싱글톤 패턴) Singleton Pattern 개념과 예제
디자인 패턴 (싱글톤 패턴) Singleton Pattern 개념과 예제
2021.12.31 -
디자인 패턴 Factory Pattern 개념과 예제
디자인 패턴 Factory Pattern 개념과 예제
2021.12.30 -
디자인 패턴 (데코레이터 패턴) Decorator Pattern 개념과 예제
디자인 패턴 (데코레이터 패턴) Decorator Pattern 개념과 예제
2021.12.30 -
디자인 패턴 observer pattern(옵저버 패턴) 개념과 예제
디자인 패턴 observer pattern(옵저버 패턴) 개념과 예제
2021.12.30