
이번 글에서 정리할 전략 패턴 또한 템플릿 메소드 패턴과 같이 알고리즘의 전체적인 구조는 고정되고 일부 로직의 구현만이 변경될 경우 사용할 수 있는 패턴이다. 이 두 패턴의 가장 큰 차이점은 패턴을 구현하는 방법으로, 템플릿 메소드 패턴은 상속을, 전략 패턴은 위임을 이용한다. 그럼 왜 굳이 비슷한 기능을 하는 패턴을 구현 방법에 따라 2개로 나눠놨을까? 의문이 들 것이다. 템플릿 메소드 패턴에서 알고리즘의 구체적인 구현은 상속을 통해 자식 클래스에서 이뤄진다. 이때 템플릿 즉 알고리즘의 전체적인 틀을 정의하는 부모 클래스의 메소드들까지도 자식 클래스에게 상속된다. 즉 자식 클래스는 자신이 실제로 사용하지 않는 부모 클래스의 기능까지도 상속받게 되고 이로 인해 부모 클래스의 변경이 불필요하게 자식 클래스..

서비스를 개발하다 보면 같은 로직을 다른 방식으로 구현해야 하는 경우가 많다. 예를 들어 할인 정책을 등급에 따라 다르게 적용하거나 지도 서비스에서 최적의 경로를 찾을 때 비용이 적게 드는 경로 또는 소요 시간이 짧은 경로를 찾는 등, 할인 적용 또는 경로 찾기라는 알고리즘의 구현을 다르게 해야 하는 경우이다. 이와 같이 알고리즘의 큰 틀, 구조는 같으면서 일부, 세부적인 동작만이 다른 경우, 변화에 유연한 구조와 낮은 코드 중복도를 위해 적용할 수 있는 디자인 패턴이 있다. 바로 템플릿 메소드 패턴과 전략 패턴인데, 이번 글에서는 템플릿 메소드 패턴에 대해 자세히 알아보고자 한다. 템플릿 메소드 패턴과 전략 패턴은 디자인 패턴 분류 중 행위(Behavioral) 패턴에 속한다. 행위 패턴은 '객체들 간..

웹 어플케이션 프레임워크의 구조에 대해서 조금이라도 공부해본 적이 있다면 Front Controller 패턴에 대해 들어본 적이 있을 것이다. 프론트 컨트롤러는 간단히 "웹 어플리케이션에서의 모든 요청을 앞단에서 처리하는 핸들러"라고 정의할 수 있는데, 이러한 구조는 코드 중복을 줄이고 유연성과 재사용성을 높여주기 때문에 많은 웹 프레임워크에서 프론트 컨트롤러 패턴을 채택하고 있다. 사실 이 정도의 정의만 이해하고 넘어가도 프레임워크를 단순히 사용하는데에는 지장이 없겠지만 프레임워크의 전체적인 구조가 어떻게 생겼는지 이해하는 것도 분명 필요하다. 따라서 기본적인 프론트 컨트롤러 패턴은 어떻게 구현되는지, 스프링에서는 이 패턴을 어떤 식으로 변형하여 MVC 구조를 구현해냈는지, 더 나아가 스프링에서 프론트..

저번 글에 이어서 Effective Java 스타일의 Builder 패턴과 @Builder 어노테이션에 대해 알아보자. 먼저 이번 글에서 계속해서 사용할 예제 클래스는 다음과 같다. @AllArgsConstructor(access = AccessLevel.PROTECTED) public class Home { private String basement; private String structure; //required private int door; //required private int window; //required private String roof; //required private String interior; } Effective Java의 Builder Pattern 앞의 글과는 다르게 ..
- Total
- Today
- Yesterday
- github
- ParameterizedTest
- 서블릿 컨테이너
- C++
- Linux
- QueryDSL
- 디자인 패턴
- JPA
- mockito
- Assertions
- 전략 패턴
- spring aop
- 템플릿 콜백 패턴
- FrontController
- Spring Security
- Git
- 모두의 리눅스
- Front Controller
- SSE
- Java
- 단위 테스트
- Gitflow
- junit5
- servlet filter
- Transaction
- vscode
- facade 패턴
- rest api
- spring boot
- spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |