스트래티지 패턴(Strategy Pattern)

로롱이·2022년 7월 19일
1

들어가기 전에

상속의 문제점

public abstract class Duck {
	public void quack();
    public void swim();
    protected void display();
}


public class MallardDuck extends Duck {
	
    @Overried
    
}

스트래티지 패턴 정의

알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지 패턴을 활용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리짐을 변경할 수 있다.

디자인 원칙

  1. 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다.
  2. 구현이 아닌 인터페이스 맞춰서 프로그래밍한다. (느슨한 결합, 추상화)

변하는 부분에 대해서는 따로 뽑아 캡슐화한다.
위 예제의 변하는 부분은

  • 나는 행동
  • 꽥꽥거리는 행동

적절하게 인터페이스를 사용해서 실제 구현 클래스들을 잘 분리했다.

이걸 사용하는 client(Duck)에서는 인터페이스에 의존해서 구현을 하면 좋을 것 같다.

최종 스트래티지 패턴 구조

구성

두 클래스를 합치는 것을 '구성(composition)을 이용한다'라고 부른다.
Duck 클래스에서는 행동을 상속받는 대신, 올바른 행동 객체로 구성되어 행동을 부여받는다.

런타임 환경에서 동적으로 알고리즘을 변경할 때 용이할 것 같다.

상속보다는 구성을 활용한다.

profile
모두 화이팅!

0개의 댓글