- Spring에서 자주 쓰이는 디자인 패턴 22022년 10월 20일
- starryeye
- 작성자
- 2022.10.20.:51
지난 포스팅에서는 템플릿 메서드 패턴에 대해 알아봤다.
이번엔 전략 패턴에 대해 알아보자.
(이를 템플릿 콜백 패턴이라 부르기도 한다.)
전략 패턴을 템플릿 메서드 패턴과 비교하여 알아보자.
공통점은, 변하는 부분과 변하지 않는 부분을 분리 하는데 초점이 맞춰져있다는 것에 있다.
차이점은..
분리할때 상속이 아닌 위임으로 문제를 해결한다.
클래스 다이어그램으로 알아보자..
Client는 Context라는 클래스를 참조한다.
Context는 Strategy라는 인터페이스를 참조한다.
Context는 Strategy를 필드로 가지고 있다. (의존관계 주입)
-> 선조립(생성 시점에 전략이 정해짐), 후실행
Context의 execute 메서드는 변하지 않는 부분에 해당한다. (템플릿)
Strategy의 call 메서드는 변하는 부분이며 (알고리즘)
구현체에서 각기 다른 부분을 담당하도록 한다.
-> Context가 변하여도 Strategy는 영향이 없다.
(템플릿 메서드 패턴에서는 Context에 해당하는게 부모클래스라 영향이 있었다.)
-> 또한, 반대로 Context는 Strategy 인터페이스만 의존하므로..
-> Strategy 구현체가 변경되거나 새로 만들어져도 영향이 없다.
참고..
위 그림처럼, Context 클래스에서 필드로 Strategy를 가지고 있을 수 도 있지만..
execute 메서드의 파라미터로 Strategy 객체를 받아서 바로 사용하는 방법도 있다.
-> 실행시점에 조립 (실행 시점에 전략이 정해짐)
ex) execute(Strategy strategy) { ... strategy.call(); ... }
참고..
스프링에서 의존관계 주입하는 방식이 전략 패턴이다.
코드로 다시 알아보자..
이를 사용하는 Client는 다음과 같다..
익명 내부 클래스와 람다를 사용하면..
Context를 생성할때 Strategy를 익명 내부 클래스로 넘긴다.(람다)
-> 인터페이스(Strategy)에 메서드(call)가 하나만 있으므로 람다가 가능하다.
정리
위에서 말한 내용도 있지만 다시 한번 정리 해보자..
Context 클래스에 Strategy를 생성자 의존관계 주입을 받아 사용하면..
실행전에 원하는 모양으로 조립해두고 실행하는 방식이다.
이는..
스프링으로 애플리케이션을 개발할 때..
애플리케이션 로딩 시점에 의존관계 주입을 통해 필요한 의존관계를 모두 맺고
실제 요청을 처리하는 것과 같은 원리이다.
-> 조립을 한 이후에는 전략을 변경하기 어려운 단점이 있다..
-> setter를 고려하면.. 싱글톤일때.. 동시성 문제가 생길 수도 있다.
따라서..
Context 클래스에 Strategy를 필드로 두고 사용하지 말고..
execute 메서드에 파라미터로 Strategy를 받아서 사용하는 방식도 고려해볼만 하다.
-> 이를 스프링에서는 템플릿 콜백 패턴이라 부른다.
'Spring > Core' 카테고리의 다른 글
Spring에서 자주 쓰이는 디자인 패턴 4 (0) 2022.11.05 Spring에서 자주 쓰이는 디자인 패턴 3 (0) 2022.11.05 Spring에서 자주 쓰이는 디자인 패턴 1 (0) 2022.10.19 @Controller, @Service, @Repository (0) 2022.09.09 Spring Core 마스터하기 1 (0) 2022.07.20 다음글이전글이전 글이 없습니다.댓글