130 likes | 356 Views
Design Pattern. Strategy Pattern - 정연운 - . Strategy pattern. 전략 패턴 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다 . 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경 할 수 있다 . Strategy pattern. 오리 시뮬레이터 오리 오리의 행동 파악 . 꽥꽥 거리는 소리를 낸다 . 헤엄을 친다 . 상속을 통해서 다양한 오리를 만든다 . Strategy pattern. 요구 사항 추가
E N D
Design Pattern Strategy Pattern - 정연운-
Strategy pattern • 전략 패턴 • 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. • 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경 할 수 있다.
Strategy pattern • 오리 시뮬레이터 • 오리 • 오리의 행동 파악. • 꽥꽥 거리는 소리를 낸다. • 헤엄을 친다. • 상속을 통해서 다양한 오리를 만든다.
Strategy pattern • 요구 사항 추가 • 오리들이 날아 다닐 수 있어야 한다. • 해결 방안 • Duck 클래스에 fly() 추가. • 모든 오리들은 그것을 상속.
Strategy pattern • 문제 발생 • 고무 오리가 날아다닌다?? • 해결 방안 ? • 고무 오리 클래스에서 fly() 오버라이드. • 나무 오리는???? 날수도 없고 소리도 내면 안 된다. 모든 함수를 오버라이드??
Strategy pattern • 해결 방안 • 인터페이스로 구현. • Flyable, Quackable • 문제점? • Fly, Quack 행동에 대한 코드 재사용 불가(interface 에서는 코드 구현을 하지 않음) • 한 행동이 바뀌면 모든 서브 클래스 수정.
Strategy pattern • 디자인 원칙 • 어플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다. • 바뀌는 부분은 따로 뽑아서 캡슐화 시킨다. • Duck 클래스 • Fly(), quack() 은 오리마다 달라지는 부분. • Duck 클래스에서 빼내서 각 행동을 나타내는 클래스 집합을 새로 만듬.
Strategy pattern • 디자인 원칙 • 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다. • 오리 행동 • FlyBehavior, QuackBehavior인터페이스.
Strategy pattern • Duck 클래스 • flyBehavior, quackBehavior인터페이스 형식의 인스턴스 변수. • Fly(), quack() 대신 performFly(), performQuack() 추가. • flyBehavior, quackBehavior로 참조되는 객체에 행동 위임. • 세터 메소드를 추가하여 실행 중에도 행동을 바꿀 수 있게 한다.
Strategy pattern • Duck 클래스 구조 • 오리의 행동 : 일련의 행동으로 생각하는 대신 알고리즘 군으로 생각. • 알고리즘 : 꽥꽥 거림, 날아다님. • 나는 행동과 꽥꽥거리는 행동 모두에 대해서 캡슐화된 알고리즘 군을 활용.
Strategy pattern • 디자인 원칙 • 상속 보다는 구성을 활용한다. • 오리는 날아다닌다.(A 는 B 이다) • 오리는 날 수 있는 능력이 있다.(A 에는 B 가 있다) • 행동을 상속 받는 대신 올바른 행동 객체로 구성됨으로써 행동을 부여받음. • Strategy pattern • 알고리즘 군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. • 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경 할 수 있다.