객체지향 (OOP)/디자인 패턴
템플릿 콜백 패턴 (Template Callback Pattern)
고인돌개발자
2021. 7. 1. 21:26
템플릿 콜백 패턴 (Template Callback Pattern)
- 전략 패턴의 변형으로, 스프링 DI(의존성 주입)에서 사용하는 특별한 형태의 전략 패턴이다.
템플릿 콜백 패턴은 전략패턴과 동일하나, 전략을 익명 내부 클래스로 정의해서 사용한다.
참고 - 전략패턴 - https://old-developer.tistory.com/136
샘플예제
전략패턴을 템플릿 콜백 패턴으로 변경하기
1. 전략 인터페이스
// 전략 인터페이스
public interface Strategy {
public abstract void runStrategy();
}
2. 전략 사용 컨텍스트
// 전략을 사용하는 컨텍스트(군인)
public class Soldier {
void runContext(Strategy strategy) {
System.out.println("전투 시작");
strategy.runStrategy();
System.out.println("전투 종료");
}
}
3. 익명 내부 전략을 사용하는 클라이언트
// 익명 내부 전략을 사용하는 클라이언트
public class Client {
public static void main(String[] args) {
Soldier rambo = new Soldier();
// 람보 총을 쏜다.
rambo.runContext(new Strategy() {
@Override
public void runStrategy() {
System.out.println("총 ! 총총총!!!");
}
});
System.out.println();
// 람보 칼을 사용
rambo.runContext(new Strategy() {
@Override
public void runStrategy() {
System.out.println("칼 ~~~ 칼 ~~~");
}
});
System.out.println();
// 람보 도끼를 사용
rambo.runContext(new Strategy() {
@Override
public void runStrategy() {
System.out.println("도끼!!! 도끼.....");
}
});
}
}
옵션 - 위 공통 부분 리팩터링
// 전략을 사용하는 컨텍스트(군인)
public class Soldier2 {
void runContext(String weaponSound) {
System.out.println("전투 시작");
executeWeapon(weaponSound).runStrategy();
System.out.println("전투 종료");
}
private Strategy executeWeapon(final String weaponSound) {
return new Strategy() {
@Override
public void runStrategy() {
System.out.println(weaponSound);
}
};
}
}
public class Client2 {
public static void main(String[] args) {
Soldier2 rambo = new Soldier2();
// 람보 총을 사용
rambo.runContext("총 ! 총총총!!!");
System.out.println();
// 람보 칼을 사용
rambo.runContext("칼 ! 칼~~!!!");
System.out.println();
// 람보 도끼를 사용
rambo.runContext("도끼.. 도끼..!!!");
}
}
참고서적 : 스프링 입문을 위하 자바 객체지향의 원리와 이해
디자인 패턴이란..
개발을 진행할때 자주 나오는 어떤 패턴을 미리 예상하여 어떻게 구현할것인지를 그 틀(패턴)을 정의해 놓은 이론적인 개념이다.