PHpullh

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) 전략을 사용하세요.