Search
Duplicate

전략 패턴

작성일시
2023/04/22 10:01
강의 번호
4단계-자동차경주
유형
강의
자료
복습
전략 패턴 은 알고리즘들의 패밀리를 정의하고, 각 패밀리를 별도의 클래스에 넣은 후 그들의 객체들을 상호교환할 수 있도록 하는 행동 디자인 패턴
아래 소스코드를 보면
현재 상황 : move 의 randomInt의 값이 0 ~ 10 사이의 값
클라이언트 요청사항 : Ex) 랜덤의 값이 0 ~ 10의 값이아닌 0 ~100의 범위로 늘려주세요.
변경하려면 수정해야될 영역이 많아진다. 이때 전략 패턴을 사용하게 되면.
public class Car implements Comparable<Car> { private static final int STARTING_CONDITION = 4; private Position position; private Name name; public Car(final String name) { this.name = new Name(name); this.position = new Position(); } public void move(int randomInt) { moveCar(isMove(randomInt)); }
Java
복사
다음과 같이 변경
자동차에서는 인터페이스로 정의하여 DI 의존적 주입으로 만들고
외부에서 해당하는 인터페이스를 구현하여 move의 값을 넘긴다.
이제 우리는 언제든지 해당하는 값들을 인터페이스를 상속받아서 유연하게 구현 할 수 있다.
package study.step5.domain.strategy; public interface MoveStrategy { int move(); }
Java
복사
package study.step5.domain.strategy; import java.util.Random; public class CarMoveStrategy implements MoveStrategy { private static final int RANDOM_RANGE = 10; private static final Random RANDOM = new Random(); @Override public int move() { return RANDOM.nextInt(RANDOM_RANGE); } }
Java
복사
public class Car implements Comparable<Car> { private static final int STARTING_CONDITION = 4; private Position position; private Name name; public Car(final String name) { this.name = new Name(name); this.position = new Position(); } public void move(MoveStrategy moveStrategy) { moveCar(isMove(moveStrategy.move())); }
Java
복사

후기

오늘은 전략패턴을 이용하여, 클래스의 중요한 역할을 하는 부분을 유연하게 변경하였다. 전략패턴을 사용하게되면 테스트 코드도 유연하게 짤 수 있을뿐만아니라, 언제든지 클라이언트 요청에대해 유연하게 변경할 수 있을것 같아서 인지하고 핵심기능에 적용하면 좋을 것 같다라는 생각을 하였다.