Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- AOP
- Servlet
- springdatajpa
- 스프링 핵심 원리
- JDBC
- 스프링
- transaction
- 자바
- Exception
- JPQL
- SpringBoot
- Spring Boot
- http
- 김영한
- db
- 스프링 핵심 기능
- java
- pointcut
- 알고리즘
- Thymeleaf
- kotlin
- QueryDSL
- jpa
- 그리디
- spring
- Proxy
- Greedy
- 인프런
- Android
- 백준
Archives
- Today
- Total
개발자되기 프로젝트
Template Method - 예제2 본문
1. Template Method Pattern
2. AbstractTemplate
- 템플릿 메서드 패턴은 이름 그대로 템플릿을 사용하는 방식이다.
- 템플릿은 기준이 되는 거대한 틀이다.
- 템플릿이라는 틀에 변하지 않는 부분을 몰아둔다.
- 그리고 일부 변하는 부분을 별도로 호출해서 해결한다.
- AbstractTemplate 코드를 보자.
- 변하지 않는 부분인 시간 측정 로직을 몰아둔 것을 확인할 수 있다.
- 이제 이것이 하나의 템플릿이 된다.
- 그리고 템플릿 안에서 변하는 부분은 call() 메서드를 호출해서 처리한다.
- 템플릿 메서드 패턴은 부모 클래스에 변하지 않는 템플릿 코드를 둔다.
- 그리고 변하는 부분은 자식 클래스에 두고 상속과 오버라이딩을 사용해서 처리한다.
@Slf4j
public abstract class AbstractTemplate {
public void execute(){
long startTime = System.currentTimeMillis();
//변하는 부분
call();
//비즈니스 로직 종료
long endTime = System.currentTimeMillis();
long resultTime = endTime - startTime;
log.info("resultTime = {}", resultTime);
}
protected abstract void call();
}
3. SubClassLogic1, 2
- 변하는 부분을 처리함.
- call()을 오버라이드 함.
@Slf4j
public class SubClassLogic1 extends AbstractTemplate{
@Override
protected void call() {
log.info("비즈니스 로직1 실행");
}
}
@Slf4j
public class SubClassLogic2 extends AbstractTemplate{
@Override
protected void call() {
log.info("비즈니스 로직2 실행");
}
}
4. Test
/**
* 템플릿 메서드 패턴 적용
*/
@Test
void templateMethodV1(){
AbstractTemplate template1 = new SubClassLogic1();
template1.execute();
AbstractTemplate template2 = new SubClassLogic2();
template2.execute();
}
19:03:37.318 [main] INFO hello.advanced.trace.template.code.SubClassLogic1 - 비즈니스 로직1 실행
19:03:37.321 [main] INFO hello.advanced.trace.template.code.AbstractTemplate - resultTime = 5
19:03:37.325 [main] INFO hello.advanced.trace.template.code.SubClassLogic2 - 비즈니스 로직2 실행
19:03:37.325 [main] INFO hello.advanced.trace.template.code.AbstractTemplate - resultTime = 0
5. 정리
- template1.execute() 를 호출하면 템플릿 로직인 AbstractTemplate.execute() 를 실행한다.
- 여기서 중간에 call() 메서드를 호출하는데, 이 부분이 오버라이딩 되어있다.
- 따라서 현재 인스턴스인 SubClassLogic1 인스턴스의 SubClassLogic1.call() 메서드가 호출된다.
- 템플릿 메서드 패턴은 이렇게 다형성을 사용해서 변하는 부분과 변하지 않는 부분을 분리하는 방법이다.
6. GitHub : 211122 TeplateMethod example2
'인프런 > [인프런] 스프링 핵심 원리 - 고급' 카테고리의 다른 글
Template Method - 적용1 (0) | 2021.11.22 |
---|---|
Template Method - 예제3, 익명 내부 클래스 (0) | 2021.11.22 |
Template Method - 예제1 (0) | 2021.11.22 |
Template Method - 시작 (0) | 2021.11.22 |
ThreadLocal - 주의사항 (0) | 2021.11.22 |
Comments