You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
람다로 변경하려면 인터페이스에 메서드가 1개만 있으면 됨, 여기서는 Strategy 인터페이스는 메서드가 1개만 있어 람다로 사용 가능함
선 조립, 후 실행
여기서 이야기하고 싶은 부분은 Context 의 내부 필드에 Strategy 를 두고 사용하는 부분
이 방식은 Context 와 Strategy 를 실행 전에 원하는 모양으로 조립해두고, 그 다음에 Context 를 실행하는 선 조
립, 후 실행 방식에서 매우 유용
Context 와 Strategy 를 한번 조립하고 나면 이후로는 Context 를 실행하기만 하면 됨
우리가 스프링으로 애플리케이션을 개발할 때 애플리케이션 로딩 시점에 의존관계 주입을 통해 필요한 의존관계를 모두 맺어두고 난 다음에 실제 요청을 처리하는 것 과 같은 원리
이 방식의 단점은 Context 와 Strategy 를 조립한 이후에는 전략을 변경하기가 번거롭다는 점
물론 Context 에 setter 를 제공해서 Strategy 를 넘겨 받아 변경하면 되지만, Context 를 싱글톤으로 사용할 때는
동시성 이슈 등 고려할 점이 많음, 그래서 전략을 실시간으로 변경해야 하면 차라리 이전에 개발한 테스트 코드 처럼
Context 를 하나더 생성하고 그곳에 다른 Strategy 를 주입하는 것이 더 나은 선택일 수 있음
전략 패턴 - 예제3
이번에는 전략 패턴을 조금 다르게 사용하자, 이전에는 Context 의 필드에 Strategy 를 주입해서 사용, 이번
에는 전략을 실행할 때 직접 파라미터로 전달해서 사용하자
packagehello.advanced.trace.strategy.code.strategy;
importlombok.extern.slf4j.Slf4j;
/** * 전략을 파라미터로 전달 받는 방식 */@Slf4jpublicclassContextV2 {
publicvoidexecute(Strategystrategy){
longstartTime = System.currentTimeMillis();
//비즈니스 로직 실행strategy.call();
longendTime = System.currentTimeMillis();
longresultTime = endTime - startTime;
log.info("resultTime={}", resultTime);
}
}
ContextV2는 전략 필드로 가지지 않음, 대신 전략을 execute(...)가 호출될 떄 마다 항상 파라미터로 받음
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
전략 패턴
전략 패턴 -예제1
GOF 디자인 패턴에서 정의한 전략 패턴의 의도는 다음과 같음
Strategy 인터페이스
StrategyLogic1
StrategyLogic2
ContextV1
ContextV1Test
원하는 모양으로 조립을 완료하고 난 다음에 context1.execute()를 호출해서 context를 실행
전략 패턴 실행 그림
실행 결과

실행 결과
선 조립, 후 실행
립, 후 실행 방식에서 매우 유용
동시성 이슈 등 고려할 점이 많음, 그래서 전략을 실시간으로 변경해야 하면 차라리 이전에 개발한 테스트 코드 처럼
Context 를 하나더 생성하고 그곳에 다른 Strategy 를 주입하는 것이 더 나은 선택일 수 있음
전략 패턴 - 예제3
에는 전략을 실행할 때 직접 파라미터로 전달해서 사용하자
TEST
는 전략을 더욱 유연하게 변경할 수 있음
해서 유연하게 실행하는 것을 확인 가능
전략 패턴 파라미터 실행 그림

정리
템플릿
때 변하지 않는 템플릿이 있고, 그 템플릿 안에서 원하는 부분만 살짝 다른 코드를 실행하고 싶을 뿐
템플릿 콜백 패턴 - 시작
콜백 정의
자바 언어에서 콜백
###템플릿 콜백 패턴 - 예제
Callback 인터페이스
TimeLogTemplate
템플릿 콜백 패턴 - 적용
TraceCallback 인터페이스
OrderServiceV5
OrderRepositoryV5
실행 로그
All reactions