객체지향
[객체지향] 디자인 패턴(5) - 전략 패턴
재담
2022. 5. 4. 02:00
전략 패턴
전략 패턴은 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다. 전략 패턴은 특정한 계열의 알고리즘들을 정의하고 각 알고리즘을 캡슐화하며 이 알고리즘들을 해당 계열 안에서 상호 교체가 가능하게 만든다.
다음 예시를 보자.
[ 슈팅 게임을 설계하시오 ]
유닛 종류 : 전투기, 헬리콥터
유닛들은 미사일을 발사할 수 있다.
전투기는 직선 미사일을, 헬리콥터는 유도 미사일을 발사한다.
필살기로는 폭탄이 있는데, 전투기에는 있고 헬리콥터에는 없다.
전략 패턴을 적용한 설계는 다음과 같다.

먼저 미사일을 쏘는 것과 폭탄을 사용하는 것을 캡슐화한다. ShootAction과 BombAction으로 인터페이스를 선언하고, 각자 필요한 로직을 클래스로 만들어 구현한다. 그리고 전투기와 헬리콥터를 묶을 Unit 추상 클래스를 만든다. Unit에는 공통적으로 사용되는 메서드들이 들어 있고, 미사일과 폭탄을 선언하기 위해 변수로 인터페이스를 선언한다.
전투기와 헬리콥터는 Unit 클래스를 상속받고, 생성자에 맞는 로직을 정의해주면 된다. 다음은 전투기 예시이다.
class Fighter extends Unit {
private ShootAction shootAction;
private BombAction bombAction;
public Fighter() {
shootAction = new OneWayMissle();
bombAction = new SpreadBomb();
}
}
전략 패턴을 활용하면 로직을 독립적으로 관리하는 것이 편해진다. 로직에 들어가는 행동을 클래스로 선언하고, 인터페이스와 연결하는 방식으로 구성하는 것이다.