템플릿 콜백 패턴(Template Callback Pattern)

박세건·2024년 5월 20일
0

디자인 패턴

목록 보기
4/17
post-thumbnail

스프링 프레임워크에서 DI 의존성 주입에서 사용하는 특별한 전략 패턴.
복잡하지만 바뀌지 않는 일정한 패턴을 갖는 작업이 존재하고 그 중에서 일부만 자주 바꿔서 사용하는 경우 적합한 전략 패턴

콜백

하나의 오브젝트를 다른 오브젝트의 메소드로 넘겨주는 코드.
즉, 파라미터로 전달되지만 값을 넘기는 것이 아닌 특정 로직을 담을 함수를 넘겨서 실행하기위해 사용

구조

장점

  • 메소드에 매개변수로 전략 로직을 넘기기 때문에 일일이 전략 객체를 생성할 필요가 없음
    • 매개변수에 넘겨주면서 new() 로 생성
  • 어떤 전략을 사용하는지 감춤

단점

  • 사용할 클래스를 직접 new()로 생성하기 때문에 결합도가 증가하지만, 단점이 될 정도의 문제 행위는 아니다.

예시 코드

// 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);
    }
}

템플릿 메서드 패턴과 비슷한 구조지만 확실한 차이가 있음

  • 템플릿 메서드 패턴
    • 상속구조를 통함 : 인터페이스를 상속받아서 로직을 구현한 후 사용
  • 템플릿 콜백 패턴
    • 콜백 객체를 통함 : 특정 메서드의 인자로 콜백 객체를 넘겨받아 콜백 객체의 메서드를 사용
profile
멋있는 사람 - 일단 하자

0개의 댓글