전략 패턴은 객체 지향 디자인 패턴 중 하나로, 특정한 계산이나 행동을 캡슐화해 객체의 형태로 만든다. 이 패턴은 알고리즘을 클래스의 구조로 만들고, 이를 필요에 따라 쉽게 교체할 수 있게 해준다.
전략 패턴은 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 이 패턴은 알고리즘, 데이터 구조 등을 캡슐화하여 독립적으로 운용하게 해준다. 이를 통해 코드의 유연성을 증가시키고, 유지 보수를 용이하게 한다.
전략 패턴은 주로 세 가지 구성 요소로 이루어져 있다:
- 전략(Strategy): 인터페이스나 추상 클래스를 사용해 알고리즘을 정의한다. 여러 개의 알고리즘 클래스가 이를 구현할 수 있다.
- 전략 구현체(Concrete Strategy): 알고리즘을 구체적으로 구현한 클래스다. 이들 클래스는 실제로 실행할 알고리즘을 정의한다.
- 콘텍스트(Context): 전략을 사용하는 클래스다. 클라이언트가 콘텍스트에게 원하는 전략을 설정하면, 콘텍스트는 해당 전략을 실행한다.
자바에서의 전략 패턴 예제를 살펴보자:
// 전략 인터페이스
public interface MovingStrategy {
public void move();
}
// 전략 구현체
public class WalkingStrategy implements MovingStrategy {
public void move() {
System.out.println("걷는다.");
}
}
public class RunningStrategy implements MovingStrategy {
public void move() {
System.out.println("달린다.");
}
}
// 콘텍스트
public class Character {
private MovingStrategy strategy;
public Character(MovingStrategy strategy) {
this.strategy = strategy;
}
public void setStrategy(MovingStrategy strategy) {
this.strategy = strategy;
}
public void move() {
strategy.move();
}
}
이 예제에서 Character 클래스는 캐릭터를 나타내며, MovingStrategy를 통해 캐릭터의 이동 방식을 정의한다. 이동 방식은 WalkingStrategy나 RunningStrategy로 변경할 수 있다.
public class Main {
public static void main(String[] args) {
Character character = new Character(new WalkingStrategy());
character.move(); // Output: 걷는다.
character.setStrategy(new RunningStrategy());
character.move(); // Output: 달린다.
}
}
이렇게 전략 패턴을 사용하면, 이동 방식이라는 알고리즘을 쉽게 교체할 수 있다. 이로써 코드의 유연성을 높이고, 알고리즘을 캡슐화하여 코드의 복잡성을 줄일 수 있다.
'Java > 스프링 AOP' 카테고리의 다른 글
템플릿 메서드 패턴, 전략 패턴, 콜백 패턴의 차이 (0) | 2023.08.02 |
---|---|
콜백 패턴 (0) | 2023.08.02 |
템플릿 메서드 패턴 (0) | 2023.07.31 |
쓰레드 로컬(Thread Local) (0) | 2023.07.28 |
인공지능과 사랑에 빠졌던 건에 대하여 (0) | 2023.07.28 |