반응형
토비의 스프링을 읽은 후 궁금한점을 기재하였습니다.
Spring 프레임워크는 다양한 디자인 패턴을 활용하여 유연하고 확장 가능한 애플리케이션을 개발할 수 있도록 도와줍니다.
그중 팩토리 메소드 패턴(Factory Method Pattern)과 템플릿 메서드 패턴(Template Method Pattern)은 자주 언급되는 패턴입니다.
하지만 이 두 패턴은 목적과 활용 방식이 다르지만, 이해가 되지 않아서 서칭한 정보를 기재하였습니다.
1. 팩토리 메소드 패턴 (Factory Method Pattern)
정의
팩토리 메소드 패턴은 객체의 생성 로직을 서브클래스에서 정의하도록 하여 객체 생성을 캡슐화하는 패턴입니다. 즉, 객체를 생성하는 책임을 서브클래스로 위임하여 클라이언트 코드가 특정 클래스에 의존하지 않도록 만듭니다.
특징
- 목적: 객체 생성의 책임을 캡슐화하고, 확장을 용이하게 함.
- 주요 구성 요소:
- Creator(추상 클래스): 객체 생성 메서드를 선언.
- Concrete Creator(구현 클래스): 객체 생성 메서드를 실제로 구현.
- Product: 생성되는 객체.
- 유연성: 생성할 객체가 변경되어도 클라이언트 코드는 영향을 받지 않음.
Spring에서의 활용 예시
- BeanFactory와 ApplicationContext
- Spring의 IoC 컨테이너는 팩토리 메소드 패턴을 사용하여 객체 생성을 관리합니다.
코드 예시
public abstract class ProductFactory {
public abstract Product createProduct();
}
public class ConcreteProductFactory extends ProductFactory {
@Override
public Product createProduct() {
return new ConcreteProduct();
}
}
// 사용
ProductFactory factory = new ConcreteProductFactory();
Product product = factory.createProduct();
2. 템플릿 메서드 패턴 (Template Method Pattern)
정의
템플릿 메서드 패턴은 알고리즘의 구조를 정의하고, 그 일부 단계를 서브클래스에서 구현하도록 하는 패턴입니다. 이를 통해 알고리즘의 큰 틀은 유지하면서, 세부 단계는 필요에 따라 변경할 수 있습니다.
특징
- 목적: 알고리즘의 공통 구조를 재사용하고, 세부 구현을 다양화함.
- 주요 구성 요소:
- Abstract Class(추상 클래스): 알고리즘의 뼈대를 정의하고, 일부 메서드를 추상 메서드로 선언.
- Concrete Class(구현 클래스): 추상 메서드를 구현하여 알고리즘의 세부 단계를 정의.
- 확장성: 알고리즘 구조를 변경하지 않고 세부 단계만 수정 가능.
Spring에서의 활용 예시
- JdbcTemplate
- Spring의
JdbcTemplate
은 템플릿 메서드 패턴을 사용하여 데이터베이스 접근 로직의 큰 틀을 제공하고, 세부 쿼리 실행 로직은 개발자가 정의합니다.
- Spring의
코드 예시
public abstract class DataProcessor {
// 템플릿 메서드
public final void process() {
loadData();
processData();
saveData();
}
protected abstract void loadData();
protected abstract void processData();
protected abstract void saveData();
}
public class CsvDataProcessor extends DataProcessor {
@Override
protected void loadData() {
System.out.println("CSV 파일 로드");
}
@Override
protected void processData() {
System.out.println("CSV 데이터 처리");
}
@Override
protected void saveData() {
System.out.println("결과 저장");
}
}
// 사용
DataProcessor processor = new CsvDataProcessor();
processor.process();
3. 팩토리 메소드 패턴과 템플릿 메서드 패턴의 차이점
구분 | 팩토리 메소드 패턴 | 템플릿 메서드 패턴 |
---|---|---|
목적 | 객체 생성의 책임을 캡슐화 | 알고리즘의 큰 틀을 정의하고 세부 단계를 서브클래스에서 구현 |
주요 개념 | 객체 생성 | 알고리즘 구조 재사용 |
주요 구성 요소 | Creator, Product | Abstract Class, Concrete Class |
Spring 활용 예시 | BeanFactory, ApplicationContext | JdbcTemplate, RestTemplate |
유형 | 생성 패턴 | 행동 패턴 |
4. 정리
팩토리 메소드 패턴은 객체 생성에 초점을 맞추는 반면, 템플릿 메서드 패턴은 알고리즘의 구조를 재사용하는 데 중점을 둡니다. 둘 다 코드의 유연성과 재사용성을 높이는 데 기여하지만, 어떤 상황에서 사용할지를 명확히 구분하여 적절히 활용하는 것이 중요합니다.
이 글이 팩토리 메소드 패턴과 템플릿 메서드 패턴의 차이를 이해하는 데 도움이 되었길 바랍니다! 질문이 있다면 댓글로 남겨주세요.
반응형
'Spring' 카테고리의 다른 글
Spring Boot Run: 내부 동작 과정과 Bean 등록 (0) | 2024.12.23 |
---|---|
Java Spring MVC에서 ArgumentResolver (0) | 2024.12.22 |
DAO의 개인적인 오해 (0) | 2024.12.17 |
DTO, VO의 개념 (0) | 2024.12.17 |
Controller vs Handler (0) | 2024.08.29 |