자바로 구현하는 스트래티지 패턴
자바는 객체지향 프로그래밍 언어로서, 다양한 디자인 패턴을 활용하여 소프트웨어 시스템을 설계할 수 있습니다. 그 중 하나인 스트래티지 패턴은 동적으로 알고리즘을 선택하는 기능을 제공합니다. 이번 글에서는 자바로 구현하는 스트래티지 패턴에 대해 살펴보고, 예제 코드를 통해 구체적으로 이해해보도록 하겠습니다.
스트래티지 패턴의 개념과 장점
스트래티지 패턴은 특정한 기능을 수행하는 알고리즘을 여러 개로 나누어 구현하고, 이 알고리즘들을 동적으로 선택하여 사용하는 패턴입니다. 이 패턴을 사용하면, 유사한 기능을 수행하는 여러 알고리즘들을 쉽게 추가하거나 수정할 수 있습니다. 또한, 이 패턴을 사용하면, 클라이언트 코드와 알고리즘 코드를 분리하여, 유지보수성을 높일 수 있습니다.
스트래티지 패턴의 장점은 다음과 같습니다.
- 확장성: 새로운 알고리즘을 추가하거나 기존 알고리즘을 수정할 때, 기존 코드를 수정하지 않고도 쉽게 구현할 수 있습니다.
- 재사용성: 동일한 기능을 수행하는 여러 알고리즘들을 쉽게 재사용할 수 있습니다.
- 유지보수성: 클라이언트 코드와 알고리즘 코드를 분리하여, 유지보수성을 높일 수 있습니다.
동적으로 알고리즘 선택하는 방법
스트래티지 패턴은 다음과 같은 3가지 역할로 구성됩니다.
- Context: 알고리즘을 사용하는 클라이언트 코드입니다. Context는 Strategy 인터페이스를 구현한 구체적인 알고리즘 객체를 가지고 있습니다.
- Strategy: 알고리즘을 수행하는 인터페이스입니다. 이 인터페이스를 구현한 여러 알고리즘 클래스들이 있습니다.
- ConcreteStrategy: Strategy 인터페이스를 구현한 구체적인 알고리즘 클래스입니다.
클라이언트 코드는 Context 객체를 생성하고, 이 객체에 적합한 알고리즘을 선택합니다. 이때, Context 객체는 선택한 알고리즘의 인스턴스를 생성하여, 적절한 메소드를 호출합니다.
동적으로 알고리즘을 선택하는 방법은 다음과 같습니다.
- Context 객체를 생성합니다.
- Context 객체에 적합한 알고리즘 객체를 전달합니다.
- Context 객체는 전달받은 알고리즘 객체를 사용하여 기능을 수행합니다.
자바로 구현한 스트래티지 패턴 예제 코드
다음은 자바로 구현한 스트래티지 패턴 예제 코드입니다. 이 예제 코드는 간단한 게임을 구현하는 것을 목표로 하며, 게임 캐릭터의 이동 방식을 스트래티지 패턴을 사용하여 구현합니다.
먼저, Strategy 인터페이스를 정의합니다.
public interface MoveStrategy {
void move();
}
다음으로, ConcreteStrategy 인터페이스를 구현한 여러 클래스를 정의합니다.
public class WalkStrategy implements MoveStrategy {
@Override
public void move() {
System.out.println("걷기");
}
}
public class RunStrategy implements MoveStrategy {
@Override
public void move() {
System.out.println("달리기");
}
}
public class FlyStrategy implements MoveStrategy {
@Override
public void move() {
System.out.println("날기");
}
}
마지막으로, Context 클래스를 정의합니다.
public class Character {
private MoveStrategy moveStrategy;
public Character(MoveStrategy moveStrategy) {
this.moveStrategy = moveStrategy;
}
public void setMoveStrategy(MoveStrategy moveStrategy) {
this.moveStrategy = moveStrategy;
}
public void move() {
moveStrategy.move();
}
}
위 코드에서는 Character 클래스가 Context 역할을 수행합니다. 캐릭터 객체를 생성할 때 적절한 이동 방식을 전달하면, 이동 방식에 따라 캐릭터가 이동합니다.
이제, 위에서 정의한 클래스들을 사용하여 게임을 구현해보겠습니다.
public class Game {
public static void main(String[] args) {
Character character = new Character(new WalkStrategy());
character.move();
character.setMoveStrategy(new RunStrategy());
character.move();
character.setMoveStrategy(new FlyStrategy());
character.move();
}
}
위 코드에서는 Character 객체를 생성하고, 이 객체에 WalkStrategy를 전달하여 이동 방식을 설정합니다. 그리고 이동 방식을 변경하면서 캐릭터를 이동시킵니다.
이번 글에서는 자바로 구현하는 스트래티지 패턴에 대해 살펴보았습니다. 스트래티지 패턴을 사용하면, 유사한 기능을 수행하는 여러 알고리즘들을 쉽게 추가하거나 수정할 수 있고, 클라이언트 코드와 알고리즘 코드를 분리하여 유지보수성을 높일 수 있습니다. 또한, 예제 코드를 통해 구체적으로 이해해보았습니다.