issues
search
endsharp
/
study
1
stars
0
forks
source link
[20230226] 전략 패턴, 템플릿 콜백 패턴
#21
Open
otakijae
opened
1 year ago
kdhooon
commented
1 year ago
전략 패턴
스프링 의존관계 주입에서 사용하는 방식
변하지 않는 부분을 Context라는 곳에 두고, 변하는 부분을 Strategy라는 인터페이스를 만들고 해당 인터페이스를 구현하도록 해서 문제를 해결
GOF 디자인 패턴에서의 정의 : 알고리즘 제품군을 정의하고 각각 캡슐화 하여 상호 교환 가능하게 만든다. 전략을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있다.
방식
필드에 전략을 저장하는 방식
선조립 후 실행 방식에서 유리 -> 파라미터로 전략을 넘기는 방식의 패턴으로 구현
단점 : 이미 조립이 끝났기 때문에 전략을 신경쓰지 않고 단순히 실행만하면 된다.
파라미터로 전략을 넘기는 방식
장점 : 실행할 때 마다 전략을 유연하게 변경할 수 있음
단점 : 역시 실행할 때 만다 전략을 계속 지정해주어야 한다.
템플릿 콜백 패턴
GOF에서 정의한 패턴은 아님, 스프링 내부에서 이런 방식을 자주 사용하기 때문에, 스프링 안에서만 이렇게 부름, 전략 패턴에서 템플릿과 콜백 부분이 강조된 패터이라고 생각하면 됨
Context 가 템플릿 역할을 하고 Strategy 부분이 콜백으로 넘어온다.
스프링에는 JdbcTemplate, RestTemplate, TransactionTemplate, RedisTemplate 처럼 다양한 템플릿 콜백 패턴이 있다. XxxTemplate 가 있다면 템플릿 콜백 패턴으로 만들어져 있다 생각하면 된다.
V5 : 템플릿 콜백 패턴을 적용
변하는 코드와 변하지 않는 코드를 분리
한계
원본코드를 수정해야 한다.
클래스가 수백개면 수백개를 더 힘들게 수정하는가 조금 덜 힘들게 수정하는가 차이가 있을 뿐, 본질적으로 코드를 다 수정해야하는 것은 마찬가지다.
실제로 스프링 안에서 많이 사용되는 방식이다.
전략 패턴
템플릿 콜백 패턴
V5 : 템플릿 콜백 패턴을 적용