- Spring에서 자주 쓰이는 디자인 패턴 12022년 10월 19일
- starryeye
- 작성자
- 2022.10.19.:31
스프링에서 자주 쓰이는 디자인 패턴 중...
템플릿 메서드 패턴에 대해 알아보자..
템플릿 메서드 패턴은..
핵심 기능(변하는 부분)과 부가 기능(변하지 않는 부분)을 분리하는데 초첨이 맞춰져 있다.
예를 들면..
다양한 로직을 처리하는 메서드들의 시작과 끝 시간을 측정하여
걸리는 시간을 측정하는 로그를 남기는 것을 개발하려고 할때..
시간 측정은 변하지 않는 부분이고..(메서드 별로 로직이 다르지 않음)
해당 메서드의 기존 구현 로직은 변하는 부분이다.(메서드 별로 로직 다름)
클래스 다이어그램으로 알아보자..
Client 클래스는 AbstractTemplate라는 추상 클래스를 참조하고..
execute 메서드를 호출한다.
AbstractTemplate는 ClassA, ClassB로 구현된다.
여기서..
execute 메서드는..
변하지 않는 부분(템플릿)에 해당하는 메서드이고
execute 내부에서 call 메서드를 호출해준다.
call 메서드는..
변하는 부분(알고리즘)에 해당하는 메서드이고,
변하는 부분의 로직을 상속과 오버라이딩을 사용하여 구현해준다.
코드로 알아보면 다음과 같다.
이를 사용하는 Client는.. 다음과 같다.
익명 내부 클래스를 사용하면,
위에서 ClassA, ClassB를 따로 만들어 줄 필요가 없다.
(Client에서 바로 해결)
참고로..
위는 람다를 사용하였는데.. (메서드가 1개만 있을 경우 가능)
이는.. 아래와 동일하다.
(template1만 작성)
AbstractTemplate template1 = new AbstractTemplate() { @Override protected void call() { log.info("비즈니스 로직1 실행"); } }; log.info("클래스 이름1={}", template1.getclass()); template.execute();
GOF 디자인 패턴에서는.. 템플릿 메서드 패턴에 대해..
어떻게 말하고 있는가..
부모 클래스에 알고리즘의 골격인 템플릿을 정의하고, 일부 변경되는 로직은 자식 클래스에 정의한다.
이렇게 하면..
자식 클래스가 알고리즘의 전체 구조를 변경하지 않고, 특정 부분만 재정의 할 수 있다.
-> 상속과 오버라이딩을 통한 다형성으로 문제를 해결할 수 있다는 의미 이다..
문제점..
결국 상속을 사용하는데에 문제가 있는데..
현재 자식 클래스는 부모 클래스의 기능(메서드나 필드 등)을 전혀 사용하지 않고 있다..
-> 자식 클래스는 부모 클래스의 기능을 사용하지 않지만..
-> 상속을 받고있기에..
-> 강하게 의존하고 있는 꼴이다.
-> 부모클래스가 변경된다면.. 자식 클래스에도 영향을 줄 수 있다.
다음 포스팅인..
전략 패턴에서는 위 문제점을 해결한다.
전략 패턴을 공부 해보자.
'Spring > Core' 카테고리의 다른 글
Spring에서 자주 쓰이는 디자인 패턴 4 (0) 2022.11.05 Spring에서 자주 쓰이는 디자인 패턴 3 (0) 2022.11.05 Spring에서 자주 쓰이는 디자인 패턴 2 (0) 2022.10.20 @Controller, @Service, @Repository (0) 2022.09.09 Spring Core 마스터하기 1 (0) 2022.07.20 다음글이전글이전 글이 없습니다.댓글