객체지향 (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("도끼.. 도끼..!!!");
				
	}

}

참고서적 : 스프링 입문을 위하 자바 객체지향의 원리와 이해

 


디자인 패턴이란.. 

 

개발을 진행할때 자주 나오는 어떤 패턴을 미리 예상하여 어떻게 구현할것인지를 그 틀(패턴)을 정의해 놓은 이론적인 개념이다.