
부모 클래스에 알고리즘의 골격인 템플릿을 정의하고, 일부 변경되는 로직은 자식 클래스에서 정의하는 것이다. 이렇게 하면 자식 클래스가 알고리즘의 전체 구조를 변경하지 않고, 특정 부분만 재정의할 수 있다. 상속과 오버 라이딩을 통한 다형성으로 문제를 해결하는 것 Spring Batch의 AbstractJob 추상 클래스 Spring Batch에 Job 인터페이스를 구현한 AbstractJob 추상 클래스와 그 하위 구현체들은 템플릿 메서드 패턴을 기반으로 구현되어 있다. 위의 구조를 설명하자면, AbstractJob 추상 클래스에는 doExecute() 추상 메서드가 있고, execute() 메서드에서 doExecute() 메서드를 실행한다. 그리고 doExecute() 추상 메서드는 하위 구현체인 Si..
전략 패턴이란 같은 기능이지만, 서로 다른 전략을 가진 클래스들을 캡슐화하여 상호 교환할 수 있도록 도와주는 디자인 패턴입니다. 전략 패턴 예시 현재 시스템은 VIP 회원에 대한 2,000원 할인을 해주는 정책을 기본적으로 제공하고 있으며, 상황에 따라 새로운 정책이 추가될 가능성이 높은 상황입니다. 아래의 코드를 보면서 전략 패턴을 설명하도록 하겠습니다. 회원 등급을 가지고 있는 Member 클래스 public class Member { private final Long id; private final String name; private final Grade grade; public enum Grade { BASIC, VIP } public Member(Long id, String name) { th..

사용자는 C 타입 형태만 지원하는 맥북을 구매했습니다. 사용자가 USB 포트를 사용하려면, USB와 C 타입을 호환할 수 있는 어댑터가 필요하게 됩니다. 사용자는 어댑터를 통해 어떠한 USB 포트를 가져와도 문제없이 C 타입의 맥북을 사용할 수 있습니다. 이처럼 어댑터 패턴은 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 동작하도록 해주는 패턴입니다. Client Adaptee를 사용하려는 사용자를 의미한다. Adaptee 라이브러리나 외부 시스템을 의미한다. Adapter Client와 Adaptee 중간에서 호환성이 없는 둘을 연결시켜주는 역할이다. Target Interface를 구현하며, Client는 TargetInterface를 통해 Adapter에 요청을 보낸다. Ad..