전략 패턴은 전략을 쉽게 바꿀 수 있도록 해주는 디자인 패턴이다.
전략이란,
어떤 목적을 달성하기 위해 일을 수행하는 방식 정도로 이해할 수 있다.
예제를 통해 전략패턴을 알아보자.
public class Robot {
private String name;
public Robot(String name) {
this.name = name;
}
public void move() {
System.out.println("I can only walk");
}
}
위와 같은 Robot 클래스가 있을 때, Robot은 걸어서 움직일 수 밖에 없다.
만약 Robot이 날 수도 있게 만들고 싶다면 어떻게 해야할까?
public void move() {
System.out.println("I can fly");
}
위와 같이 Robot 클래스내의 move() 메서드를 수정해야할 것이다.
그렇게 되면 SOLID 원칙 중 OCP를 위반하게 된다.
또한, Robot 외의 움직임을 갖는 클래스들이 여럿 있다고하면 움직임에 대한 중복된 코드들이 쌓여갈 것이다.
중복된 코드는 일관성 있게 관리하는 것은 많은 노력을 요구하기 때문에
위 두 가지 문제점을 해결할 방안이 필요하다.
객체의 움직임에 대해 걷기, 날기와 같이 구체화된 값을 가지기 보다는
추상화된 값을 가지는 필드를 만들어준다.
public class Robot {
private String name;
private MovingStrategy movingStrategy;
public Robot(String name) {
this.name = name;
}
public void move() {
movingStrategy.move{};
}
public void setMovingStrategy(MovingStrategy movingStrategy) {
this.movingStrategy = movingStrategy;
}
}
public interface MovingStrategy {
public void move();
}
public class WalkingStrategy implements MovingStrategy {
public void move() {
System.out.println("I can only walk");
}
}
public class Client {
Robot robot = new Robot("robot1");
robot.setMovingStrategy(new WalkingStrategy());
}
위와 같이 인터페이스를 이용해 움직임을 추상화하고 구체화된 움직임을 Robot 객체의 움직임으로 설정하면
움직임이 바뀔 때마다 기존의 코드는 바뀌지 않고, 새로운 코드를 추가함으로 객체의 움직임을 변경할 수 있다.
'DESIGN PATTERN' 카테고리의 다른 글
[DESIGN PATTERN] SOLID 원칙 (객체지향 5대원칙) (0) | 2022.12.14 |
---|