JAVA · 객체지향
전략 패턴
알고리즘을 캡슐화하고 런타임에 교체할 수 있는 전략 패턴입니다.
객체지향중급strategy전략패턴행동패턴함수형
핵심 설명
알고리즘을 캡슐화하고 런타임에 교체할 수 있는 전략 패턴입니다.
Java code
import java.util.*;
import java.util.function.UnaryOperator;
// 함수형 인터페이스를 전략으로 활용
public class StrategyPattern {
// 전략: 문자열 포맷터
record TextProcessor(UnaryOperator<String> strategy) {
String process(String text) {
return strategy.apply(text);
}
}
// 전략 정의
static final UnaryOperator<String> UPPER = String::toUpperCase;
static final UnaryOperator<String> LOWER = String::toLowerCase;
static final UnaryOperator<String> TITLE = text -> {
String[] words = text.split(" ");
StringBuilder sb = new StringBuilder();
for (String w : words) {
if (!w.isEmpty()) {
sb.append(Character.toUpperCase(w.charAt(0)))
.append(w.substring(1).toLowerCase())
.append(" ");
}
}
return sb.toString().trim();
};
public static void main(String[] args) {
String text = "hello world java";
// 런타임에 전략 교체
var processor = new TextProcessor(UPPER);
System.out.println(processor.process(text)); // HELLO WORLD JAVA
processor = new TextProcessor(TITLE);
System.out.println(processor.process(text)); // Hello World Java
// 람다로 즉석 전략
processor = new TextProcessor(s -> s.replace(" ", "_"));
System.out.println(processor.process(text)); // hello_world_java
}
}학습 팁
Java의 함수형 인터페이스를 전략으로 사용하면 별도의 전략 인터페이스 없이도 전략 패턴을 구현할 수 있습니다.
주의할 점
전략이 상태를 가지면 스레드 안전 문제가 발생할 수 있습니다. 가능하면 상태 없는(stateless) 전략을 사용하세요.
자주 묻는 질문
전략 패턴란 무엇인가요?
알고리즘을 캡슐화하고 런타임에 교체할 수 있는 전략 패턴입니다.
전략 패턴 학습 시 주의할 점은 무엇인가요?
전략이 상태를 가지면 스레드 안전 문제가 발생할 수 있습니다. 가능하면 상태 없는(stateless) 전략을 사용하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.