JAVA/디자인 패턴
8. 전략 패턴
개발자잡
2022. 6. 29. 14:23
Strategy pattern
전략패턴으로 불리며, 객체지향의 꽃이라고 불린다.
유사한 행위들을 캡슐화하여, 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아닌 전략만 변경 하여, 유연하게 확장 하는 패턴 SOLID중에서 개방폐쇄 원칙 (OCP)과 의존 역전 원칙 (DIP)를 따른다.
전략 메서드를 가진 전략 객체
전략 객체를 사용하는 컨텍스트
전략 객체를 생성해 컨텍스트에 주입하는 클라이언트를 코딩해보았다.
public interface EncodingStrategy {
String encode(String text);
}
import java.util.Base64;
public class NormalStrategy implements EncodingStrategy{
@Override
public String encode(String text) {
return Base64.getEncoder().encodeToString(text.getBytes());
}
}
public class Base64Strategy implements EncodingStrategy{
@Override
public String encode(String text) {
return text;
}
}
public class Encoder {
private EncodingStrategy encodingStrategy;
public String getMessage(String message){
return this.encodingStrategy.encode(message);
}
public void setEncodingStrategy(EncodingStrategy encodingStrategy) {
this.encodingStrategy = encodingStrategy;
}
}
Encoder encoder = new Encoder();
//base64
EncodingStrategy base64 = new Base64Strategy();
//normal
EncodingStrategy normal = new NormalStrategy();
String message = "hello java";
encoder.setEncodingStrategy(base64);
String base64result = encoder.getMessage(message);
encoder.setEncodingStrategy(normal);
String normalResult = encoder.getMessage(message);
System.out.println(base64result);
System.out.println(normalResult);
사용하기 위한 Encoder라는 기본객체가 존재하고
Base64와 노말이라는 전략이 존재하고
사용할때 전략을 세팅한다.
간단하게 TEXT에 ABCD를 붙여주는 새로운 전략을 추가해서 결과를 출력해보았다.
public class AppendStrategy implements EncodingStrategy {
@Override
public String encode(String text) {
return "ABCD" + text;
}
}
encoder.setEncodingStrategy(new AppendStrategy());
String appendResult = encoder.getMessage(message);
System.out.println(appendResult);
이런식으로 전략만 수정해서 다른 결과를 얻어내는 것이 가장 많이 쓰이는 전략 패턴이다.
반드시 세가지가 있어야 한다.
1.전략 메서드를 가지는 전략 객체
예시에서 Normal, base64, append 객체가 있었다.
2. 전략 객체를 사용하는 컨텍스트
예시(Encoder)
3. 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트.
디자인 패턴을 마치며
이러한 디자인 패턴을 알고 있으면 코딩을 하거나 설계를 할 때 유연하고 확장성이 좋은 소프트웨어를 설계 하는데에 중요함을 느꼈다.
기본에 대한 부분을 다시 살펴보며 숙지하도록 노력해야 겠다.