학교에서 소프트웨어 디자인패턴 수업을 듣게되었는데 부교재로 이 책을 사게되었다.
난 몰랐는데 디자인패턴쪽에서는 유명한 책이라고 한다!
학교에서 진도나가는 주교재는 영어 원서여서 이건 스터디하는데에 사용하기로..
아무튼 유난님과 매주 한챕터씩 읽고 주 1회씩 줌으로 스터디를 하기로 했다!
대학생도 힘든 스터디를 회사 다니면서 하는... 아무튼 정말 대단하네요....
히튼 그래서 사실 첫 스터디는 저번주에 했는데 정리하는걸 깜빡했어!!!
지금이라도 하도록 하겠어요
전략패턴 (Strategy Pattern)
알고리즘군을 캡슐화해서 각각의 알고리즘들을 수정해서 쓸 수 있게 하는 패턴.
클라이언트로부터 알고리즘을 분리해서 독립적으로 쓸 수 있게 하는 패턴.
배운 것
- 변화하는 부분은 뽑아서 캡슐화하자!
- 구현보다는 추상(인터페이스)에 의존하는 프로그래밍이 더 좋은 프로그램이라는 것을 알게되었다. -> 왜? 정책이나 전략에 변동이 있다고 하더라도 클라이언트 코드는 변경할 필요가 없기 때문이다.
- 다시말해 상속보다는 구성이 낫다! (객체가 알고리즘들을 추상화한 인터페이스들을 포함하도록.. )
- 상속해서 직접 구현체를 만들고 메소드를 오버라이딩해서 실행하는것이 아니라, 인터페이스에 의존하게 만들어서 클라이언트 코드는 그 구체적인 객체를 모르고 그냥 실행시키게 해야한다.
public abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck(){}
public abstract void display();
public void performFly(){
flyBehavior.fly(); //이렇게!!
}
public void performQuack(){
quackBehavior.quack(); //이렇게!!
}
public void swim(){
System.out.println("모든 오리는 물에 뜹니다. 가짜 오리도 뜨죠.");
}
public void setFlyBehavior(FlyBehavior fb){
flyBehavior = fb;
}
public void setQuackBehavior(QuackBehavior qb){
quackBehavior = qb;
}
}
public class Main {
public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.performFly();
Duck model = new ModelDuck();
model.performFly();
model.setFlyBehavior(new FlyRocketPowered());
model.performFly();
}
}
'아키텍쳐 & 디자인패턴' 카테고리의 다른 글
OOAD(Object Oriented Analysis and Design) (1) (20) | 2023.04.23 |
---|