@Test
void strategyV2(){
Strategy logic1 = new Strategy() {
@Override
public void call() {
log.info("비즈니스 로직1 실행");
}
};
ContextV1 context1 = new ContextV1(logic1);
context1.execute();
}
이렇게 익명 클래스로 만들 수 있다.
@Test
void strategyV3(){
ContextV1 context1 = new ContextV1(new Strategy() {
@Override
public void call() {
log.info("비즈니스 로직1 실행");
}
});
context1.execute();
}
아예 이렇게 인자로 넣을 수 도 있고,
public interface Strategy {
void call();
}
만약 이렇게 인터페이스의 메소드가 단 하나라면,
@Test
void strategyV4(){
ContextV1 context1 = new ContextV1(() -> {
log.info("비즈니스 로직1 실행");
});
context1.execute();
}
그냥 람다로 바로 넣을 수 있다.
@Test
void strategyV4(){
ContextV1 context1 = new ContextV1(() -> log.info("비즈니스 로직1 실행"));
context1.execute();
}
이렇게도 되는데, 실행 명령이 한 줄만 있으면 중괄호를 안 써도 된다.
@Test
void strategyV4(){
ContextV1 context1 = new ContextV1(() -> log.info("비즈니스 로직1 실행"));
context1.execute();
ContextV1 context2 = new ContextV1(() -> log.info("비즈니스 로직2 실행"));
context2.execute();
}
여러 개 일 경우.
문맥은 고정된 건데, 그냥 Strategy를 setter 같은 걸로 바꾸면 되지 않나?
문맥은 싱글톤으로 놔두고?
문맥이 싱글톤 일 경우, 동시성 이슈가 있을 수 있음.
나중에 배우겠지만 콜백으로 주면 됨.
'스프링 > 스프링 핵심 원리 - 고급편' 카테고리의 다른 글
24. 템플릿 콜백 패턴 (0) | 2024.01.17 |
---|---|
23. 전략 패턴 인자로 받기 (0) | 2024.01.17 |
21. 전략 패턴 (0) | 2024.01.17 |
20. 템플릿 메서드 패턴 적용 (0) | 2024.01.15 |
19. 익명 클래스 (0) | 2024.01.15 |