핵심은 추상화다
전략 패턴이란?
알고리즘들의 패밀리를 정의하고, 각 패밀리를 별도의 클래스에 넣은 후 그들의 객체들을 상호교환할 수 있도록 하는 행동 디자인 패턴입니다.
공부하기 좋은 곳
이상한 나라 엘리스에서 모자장수가 누가 과일 파이들을 훔쳤나?
구체적으로 하면 바꾸기 힘들다
1. Ex
- 왕이 토끼에게 “모자장수는 들라하라” 라고 한다
- 토끼는 “모자장수는 들어와라” 라고 한다
- 토끼는 “모자장수는 증언하라” 라고 한다
- 모자장수가 증언을 한다
만약 왕이 왕비로 바뀌고 모자장수가 엘리스로 바뀐다면 다 변해야 한다
1.1 Ex 추상화 한 것(좋음)
- 재판관은 “진행자야 증인을 들라하라” 라고 한다
- 진행자는 “증인은 들어와라” 라고 한다.
- 진행자는 “증인은 증언하라” 라고 한다.
- 증인이 증언을 한다.
→ 기존 코드를 손대지 않아도 된다. new엘리스 하고 증인을 상속하면 된다.
→ 구체적인 것에 의존하지 않고, 추상적인 것에 의존(재판관은 토끼와 모자장수에 의존하지 않는다)
2. dip가 전략패턴이다
O(ocp) → 개방폐쇠의 원칙 : 기존코드 손대지 말고 새로운 것에는 열려있어라
D(dip)(Dependency Inversion Principle) → 의존성 역전 원칙 ( 추상적인것에 의존해라(구체적인 것에 의존하지 말고)) 왜 쓰는지는 다른 이유
S(SRP) → 단일 책임의 원칙(엔진은 엔진의 원칙만 가지면 된다. ) 여러가지 가 같이 있으면 무엇이 문제인지 확인이 어렵기 때문에 확인하기 위해 (클래스는 최소한의 원칙으로 만든다)
LI는 중요하지 않음
3. 예시
3.1 동물이면 쫓아 내는 코드를 만들어라
기존 코드
public class App {
public static void main(String[] args) {
Mouse m1 = new Mouse();
Tiger t1 = new Tiger();
Doorman d1 = new Doorman();
d1.쫓아내(t1);
d1.쫓아내(m1);
}
}
public class Doorman {
//책임줄거다 쥐 출입금지
public void 쫓아내(Mouse a){
System.out.println(a.getName()+"쫓아내");
}
}
public class Mouse{
private String name = "쥐";
public String getName() {
return name;
}
}
public class Tiger{
private String name = "호랑이";
public String getName() {
return name;
}
}
3.2 타입 일치(다형성), abstract
public class App {
public static void main(String[] args) {
Mouse m1 = new Mouse();
Tiger t1 = new Tiger();
Doorman d1 = new Doorman();
d1.쫓아내(t1);
d1.쫓아내(m1);
}
}
public class Doorman {
//책임줄거다 쥐 출입금지
public void 쫓아내(Animal a){
System.out.println(a.getName()+ "쫓아내");
}
}
abstract class Animal {
abstract String getName();
}
public class Mouse extends Animal {
private String name = "쥐";
public String getName() {
return name;
}
}
public class Tiger extends Animal {
private String name = "호랑이";
public String getName() {
return name;
}
}
4. 그림 설명

Share article