티스토리 뷰
전략 패턴
GOF에서는 전략 패턴을 "알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만들자. 전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다"고 말한다.
이전에 템플릿 메서드 패턴은 부모 클래스에 변하지 않는 템플릿을 두고, 변하는 부분을 자식 클래스에 두어서 상속을 사용해서 문제를 해결했다.
전략 패턴은 변하지 않는 부분을 Context
라는 곳에 두고, 변하는 부분을 Strategy
라는 인터페이스를 만들고 해당 인터페이스를 구현하도록 해서 문제를 해결한다. 상속이 아니라 위임으로 문제를 해결하는 것이다.
이번에도 이해를 돕기 위해 요리사들의 요리 시작부터 완성하기까지의 시간을 측정해야 한다고 가정해보고, 전략 패턴을 적용하여 구현해보자.
전략 패턴 적용
@Slf4j
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void execute() {
long startTime = System.currentTimeMillis();
// 비지니스 로직 실행
strategy.call(); // 위임
// 비지니스 로직 종료
long endTime = System.currentTimeMillis();
long resultTime = endTime - startTime;
log.info("resultTime={}", resultTime);
}
}
public interface Strategy {
void call();
}
@Slf4j
public class KoreanChef implements Strategy{
@Override
public void call() {
log.info("한식 요리 시작 !");
}
}
@Slf4j
public class ChineseChef implements Strategy{
@Override
public void call() {
log.info("중식 요리 시작 !");
}
}
/**
* 전략 패턴 적용
*/
@Test
void strategyV1() {
KoreanChef koreanChef = new KoreanChef();
Context koreanChefContext = new Context(koreanChef);
koreanChefContext.execute();
ChineseChef ChineseChef = new ChineseChef();
Context chineseChefContext = new Context(ChineseChef);
chineseChefContext.execute();
}
결과
Reference
김영한. 스프링 핵심 원리 - 고급편. 인프런.
'Study' 카테고리의 다른 글
[자료구조] Linked List (0) | 2022.07.31 |
---|---|
[Design Pattern] 템플릿 콜백 패턴 (0) | 2022.05.09 |
[Design Pattern] 템플릿 메서드 패턴 (0) | 2022.05.08 |
[Refactoring] 기본형 집착 (0) | 2022.03.19 |
[Refactoring] 산탄총 수술 (0) | 2022.03.18 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 코테
- 데이터베이스
- 노마드코더
- 정렬
- 백준
- leetcode
- 인프런
- 스프링 부트
- webflux
- spring boot
- 파이썬
- 김영한
- 스프링부트
- 릿코드
- 리팩토링
- 구현
- kotlin
- 코틀린
- 알고리즘
- 그리디
- MySQL
- 자료구조
- Algorithm
- Real MySQL
- mysql 8.0
- 스프링
- 노마드
- 북클럽
- 문자열
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함