반응형
팩토리 메서드 패턴에 대해서 알아보자
1. 팩토리 메서드 패턴이란?
팩토리 메서드 패턴은 객체 생성을 추상화하고 캡슐화하는 디자인 패턴이다. 스프링에서 이 패턴은 BeanFactory와 ApplicationContext를 통해 구현된다. 객체를 직접 생성하는 대신, 팩토리를 통해 객체를 요청하면, 이 팩토리가 객체 생성의 복잡성을 숨기고 필요한 객체를 제공한다.
1-1. 팩토리 메서드 패턴의 기본 구조
1. 정의 |
|
2. 구현 방식 |
|
3. 장점 |
|
1-2. 스프링 프레임워크에서의 팩토리 메서드 패턴
1. 스프링 빈 팩토리 |
|
2. 빈 생성 과정의 추상화 |
|
3. ApplicationContext와 BeanFactory |
|
1-3. 팩토리 메서드 패턴의 유용성
1. 유연성 |
|
2. 재사용과 유지보수 |
|
3. 의존성 관리 |
|
내가 주로 사용하는 정적 팩토리 메서드를 선언하는 방법을 소개한다.
1-4. 인터페이스를 사용하지 않고 클래스 내부에서 정적(static) 팩토리 메서드를 선언하기
1. 생성자를 Private으로 선언 |
|
2. 정적 팩토리 메서드 구현 |
|
3. 객체 생성의 제어 |
|
- 아래와 같이 코드를 작성한다.
public class MyClass {
private MyClass() {
// Private 생성자
}
public static MyClass of() {
// 객체 생성 로직
return new MyClass();
}
}
- 이 방식의 장점은 다음과 같다.
1. 명시적인 메서드 이름 |
|
2. 유연성 |
|
3. 조건부 객체 생성 |
|
실전 예시를 통해 팩토리 메서드 패턴을 알아보자
2. 팩토리 메서드 패턴 예시코드
2-1. 예시코드 설명
- 예를 들어, 쇼핑몰 프로젝트에서 상품 정보를 나타내는
Product
엔티티가 있다고 가정하자. 이 엔티티에 대한 DTO(Data Transfer Object)를 생성할 때, 팩토리 메서드를 사용할 수 있다.
2-2. ProductDto 클래스 내부에 정적(static) 팩토리 메서드 작성하기
- 이 코드에서 ProductDTO 클래스는 Product 엔티티의 데이터를 담기 위한 DTO다. of라는 정적 팩토리 메서드를 통해 Product 인스턴스로부터 ProductDTO를 생성한다.
- 이 방식은 new 키워드를 직접 사용하는 대신, 팩토리 메서드를 통해 객체 생성의 세부 사항을 추상화하고, 클라이언트 코드에서 객체 생성 방법의 변경에 덜 민감하게 만든다.
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public class ProductDTO {
private Long id;
private String name;
private Double price;
private ProductDTO(Long id, String name, Double price) {
return new ProductDTO(id, name, price);
}
// 팩토리 메서드
public static ProductDTO toEntity(Product product) {
return new ProductDTO(product.getId(), product.getName(), product.getPrice());
}
public static ProductDTO of(String name, Double price) {
return new ProductDTO(2L, name, price);
}
}
팩토리 메서드의 장단점은 다음과 같다.
3. 팩토리 메서드 패턴의 장단점
3-1. 장점
1. 객체 생성 과정의 캡슐화 |
|
2. 유연성과 확장성 |
|
3. 의존성 관리 |
|
3-2. 단점
1. 코드 복잡성 증가 |
|
2. 디자인의 오버헤드 |
|
이렇게 팩토리 메서드 패턴을 이해하고 사용하면, 스프링 기반의 애플리케이션에서 보다 깔끔하고 유지보수가 쉬운 코드를 작성할 수 있다. 실무에서는 객체 생성의 복잡성을 관리하고 코드의 가독성을 높이기 위해 이 패턴을 자주 사용하곤 한다.
팩토리 메서드 패턴은 생각보다 많이 사용된다. JPA엔티티에서도 사용되고 Dto객체에서도 많이 사용된다.
싱글톤 패턴도 가볍게 알아보고 싶다면? 👇🏻👇🏻
반응형
'Spring 기초 > Spring 기초 지식' 카테고리의 다른 글
[Spring] RuntimeException의 메시지 (0) | 2023.12.21 |
---|---|
가볍게 알아보는 디자인 패턴 - 퍼사드 패턴(Facade Pattern) (3) | 2023.12.11 |
가볍게 알아보는 디자인 패턴 - 싱글톤 패턴(Singleton Pattern) (1) | 2023.12.11 |
Spring Boot 생성자 주입 알아보기1: @ComponentScan 동작원리 (1) | 2023.12.02 |
SpringBoot: 리소스 관리하기 (resource) (1) | 2023.11.25 |