일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- ipfs bean
- mongodb lookup
- spring mongoTemplate switch
- 백준 1504 java
- java 1238
- spring mongoTemplate
- javav 1676
- 자바 1676
- 백준 특정한 최단 경로
- Spring ipfs
- 안정해시
- kotiln functional interface
- java 파티
- java 백준 1509
- kotiln const
- nodejs rabbitmq
- java 팩토리얼 개수
- go
- Java Call By Refernce
- 익명 객체 @transactional
- ipfs singletone
- spring mongodb
- 백준 연결요소 자바
- spring mongodb switch
- 백준 2252 줄세우기
- kotiln const val
- 자바 백준 팩토리얼 개수
- 전략 패턴이란
- rabbitmq 싱글톤
- java 1509
Archives
- Today
- Total
공부 흔적남기기
템플릿 메서드 패턴이란 본문
728x90
반응형
템플릿 메서드 패턴..
그전에 템플릿이란 ? 템플릿은 큰 구조를 만들어 놓고 내부는 사용자가 직접 구현해 사용하도록 하는 것이다. 흔히 mongodTemplate, redisTemplate 등 다양한 곳에서 사용된다.
템플릿 메서드 패턴도 결이 비슷한데, 중복되는 로직들을 (변하지 않는 부분들) 모아서 템플릿화 시키고 (추상 클래스 생성) 이를 상속하여 변하지 않는 부분을 구현 시키는 것이다.
예를들어 모든 서비스 로직에 로그를 단다고 가정하면, 로그 다는 부분을 추상클래스로 만들고 이를 상속해서 서비스를 구현하면 되는 것이다. 즉 다형성의 원리를 사용하여 단일 책임원칙을 지켜 객체지향적 코드를 작성할 수 있게 된다. (중복되는 부분을 고칠 때 템플릿 부분만 고치면됨)
@Slf4j
public abstract class AbstractTemplateMethod {
public void execute(){
Long startTime = System.currentTimeMillis();
call();
Long endTime = System.currentTimeMillis();
log.info("걸린 시간: {}ms", endTime-startTime);
}
protected abstract void call();
}
상속 받아 사용
@Slf4j
public class SubClassLogic1 extends AbstractTemplateMethod{
@Override
protected void call() {
log.info("비즈니스 로직 1 실행");
}
}
@Slf4j
public class SubClassLogic2 extends AbstractTemplateMethod{
@Override
protected void call() {
log.info("비즈니스 로직 2 실행");
}
}
익명 함수 사용
void templateMethodTest() {
AbstractTemplateMethod template1 = new AbstractTemplateMethod() {
@Override
protected void call() {
Long startTime = System.currentTimeMillis();
log.info("비즈니스 로직 1");
Long endTime = System.currentTimeMillis();
}
};
AbstractTemplateMethod template2 = new AbstractTemplateMethod(){
@Override
protected void call(){
Long startTime = System.currentTimeMillis();
log.info("비즈니스 로직 2");
Long endTime = System.currentTimeMillis();
}
};
template1.execute();
template2.execute();
}
하지만 이 역시 상속 문제를 피할 순 없다.
- 하위 클래서 상위 클래스를 의존할 필요 없지만 의존해야만 한다.
- 상위 클래스 정보를 사용하고 있지 않다.
- 따로 익명객체나 상속 객체를 만들어 사용해야한다.
이를 해결하는 방법으로 전략 패턴이 있다
https://codingstudytrace.tistory.com/146
전략 패턴이란
전략 패턴이란 컨텍스트(변하지 않는 부분) 안에서 전략(변하는 부분)을 전달받아 실행하는 패턴이다. 전략은 컨텍스트에서 인터페이스로 존재하며 여러 전략들이 인터페이스를 구현하여 컨텍
codingstudytrace.tistory.com
728x90
반응형
'web study > 배경지식' 카테고리의 다른 글
프록시 패턴 | 데코레이터 패턴 (0) | 2023.12.18 |
---|---|
전략 패턴이란 (0) | 2023.05.24 |
Sentry 적용시 기본 설정 (0) | 2023.04.14 |
비대칭키 예시 (https 통신, Blockchain 예시) (0) | 2023.04.03 |
adapter Pattern (Go middleware 사용법) (0) | 2023.02.27 |