스프링 프레임워크에서 DI 의존성 주입에서 사용하는 특별한 전략 패턴.
복잡하지만 바뀌지 않는 일정한 패턴을 갖는 작업이 존재하고 그 중에서 일부만 자주 바꿔서 사용하는 경우 적합한 전략 패턴
하나의 오브젝트를 다른 오브젝트의 메소드로 넘겨주는 코드.
즉, 파라미터로 전달되지만 값을 넘기는 것이 아닌 특정 로직을 담을 함수를 넘겨서 실행하기위해 사용
// OperationStrategy 인터페이스
interface OperationStrategy {
int calculate(int x, int y); // 실제 연산을 담당할 메서드
}
// OperationTemplate 클래스 (템플릿 역할)
class OperationTemplate {
// 템플릿 메서드로 연산의 전후 로깅을 수행
int calculate(int x, int y, OperationStrategy cal) {
System.out.println("연산 시작");
int result = cal.calculate(x, y); // 콜백을 통해 연산 수행
System.out.println("연산 종료");
return result;
}
}
// 덧셈 연산을 수행하는 구체적인 전략 클래스
class AdditionStrategy implements OperationStrategy {
@Override
public int calculate(int x, int y) {
return x + y;
}
}
// 곱셈 연산을 수행하는 구체적인 전략 클래스
class MultiplicationStrategy implements OperationStrategy {
@Override
public int calculate(int x, int y) {
return x * y;
}
}
// 사용 예시
public class Main {
public static void main(String[] args) {
OperationTemplate template = new OperationTemplate();
// 덧셈 전략을 사용하여 연산 수행
int additionResult = template.calculate(5, 3, new AdditionStrategy());
System.out.println("Addition Result: " + additionResult);
// 곱셈 전략을 사용하여 연산 수행
int multiplicationResult = template.calculate(5, 3, new MultiplicationStrategy());
System.out.println("Multiplication Result: " + multiplicationResult);
}
}
템플릿 메서드 패턴과 비슷한 구조지만 확실한 차이가 있음
- 템플릿 메서드 패턴
- 상속구조를 통함 : 인터페이스를 상속받아서 로직을 구현한 후 사용
- 템플릿 콜백 패턴
- 콜백 객체를 통함 : 특정 메서드의 인자로 콜백 객체를 넘겨받아 콜백 객체의 메서드를 사용