개발이군고구마

[Spring : Design Pattern] 1. Template Method (Abstract Class) 본문

SERVER/Spring

[Spring : Design Pattern] 1. Template Method (Abstract Class)

김구황 2024. 10. 2. 17:00
728x90

1.  개요

- 변하는 부분과 변하지 않는 부분을 분리하여 코드의 재사용을 도모함
- 그렇다면 abstract class 를 만들어서 abstract method 에 변화 가능한 소스를 심어주는 방법


2.  소스의 예

 

- Kafka 에 데이터를 담을 때 사용하는 template method 패턴
- 중간에 abstract class를 구현하는 class를 만들고 -> 그 class를 의존성 주입을 받음 (중간 단계 추가)

 

[Abstract Template Class]

class abstract class KafkaTemplate {
	public ListenableFuture<> send (Class class) {
		지속적으로 반복하는 소스 코드
	}
	
	protected abstract void onFailureCase(String topic, Dto message) {
		상속받는 객체가 구현해야할 변하는 값
	}
}	
	

 


[구현 중간 단계]

public class BusinessTemplate extends KafakaTemplate{
	생성자 super
	@Override
	protected void onFailureCase(String topic, Dto message){
		변하는 부분 
	}
}



[실행 - 구현 클래스를 의존성 주입 받음]

public class MainTest {
	@Autowired
	private BusinessTemplate businessTemplate;
	
	businessTemplate.send(topicName, new DTO(pk, mbr));

}

 

 


정석적인 Template Method 방식



- 구현 중간 단계 없고, 바로 abstractClass를 구현하는 경우
-> innerClass를 사용할 수 있음 (abstract class 인스턴스 생성시에 abstract 메소드에 대한 정의)

CommonKafkaTemplate template = new CommonKafkaTemplate () {
    @Override
    protected void onFailureCase (String topicName, Dto message){
        변하는 부분
    }
}

template.send(topicName, message);