즉 Factory Method가 디자인 패턴이다. 객체 생성의 책임을 서브클래스에 위임하고, 다형성을 활용하여 객체 생성을 캡슐화한다.
객체 생성의 책임을 클라이언트 코드로부터 분리하여, 객체를 생성하는 방법을 캡슐화하는 디자인 패턴
이 패턴은 주로 객체의 생성 로직이 복잡하거나, 여러 종류의 객체를 생성해야 할 때 유용하다
// Product 인터페이스
interface Product {
void use();
}
// ConcreteProduct A
class ProductA implements Product {
@Override
public void use() {
System.out.println("Using Product A");
}
}
// ConcreteProduct B
class ProductB implements Product {
@Override
public void use() {
System.out.println("Using Product B");
}
}
// Factory 인터페이스
interface ProductFactory {
Product createProduct();
}
// Factory A
class ProductAFactory implements ProductFactory {
@Override
public Product createProduct() {
return new ProductA();
}
}
// Factory B
class ProductBFactory implements ProductFactory {
@Override
public Product createProduct() {
return new ProductB();
}
}
// Provider
class FactoryProvider {
public static ProductFactory getFactory(String type) {
if ("A".equalsIgnoreCase(type)) {
return new ProductAFactory();
} else if ("B".equalsIgnoreCase(type)) {
return new ProductBFactory();
}
return null;
}
}
// 클라이언트 코드
public class Client {
public static void main(String[] args) {
ProductFactory factory = FactoryProvider.getFactory("A");
Product product = factory.createProduct();
product.use(); // "Using Product A" 출력
}
}
Factory : 객체 생성 로직을 담당하는 클래스입니다. 클라이언트는 직접 객체를 생성하지 않고, Factory를 통해 객체를 요청합니다.
Provider : 다양한 Factory를 제공하여 클라이언트가 필요로 하는 특정 객체를 생성할 수 있도록 합니다. 여러 종류의 Factory를 관리하고, 클라이언트의 요청에 따라 적절한 Factory를 제공합니다.
Product : 제품의 인터페이스를 정의합니다.
Concrete Products : ProductA와 ProductB는 실제 제품을 구현합니다.
ProductFactory : 제품을 생성하는 Factory 인터페이스입니다.
Concrete Factories : ProductAFactory와 ProductBFactory는 각각의 제품을 생성하는 Factory입니다.
FactoryProvider : 요청에 따라 적절한 Factory를 반환하는 Provider입니다.
Client : 클라이언트는 FactoryProvider를 통해 필요한 제품의 Factory를 얻고, 제품을 생성하여 사용합니다.
💡 Factory Provider Pattern의 주요 목적
- 객체 생성 로직을 클라이언트로부터 분리하기 위해
💡 Factory Provider Pattern을 사용할 때의 장점
- 객체 생성의 유연성을 높인다.
💡 Factory Provider Pattern의 주요 이점
- 모든 객체를 단일 타입으로 만든다
💡 Factory Provider Pattern의 단점
- 복잡한 구조
💡 Factory Provider Pattern을 사용하면 코드의 어떤 특성이 향상되는가
- 유연성 및 유지보수성
💡 Factory Provider Pattern을 사용할 때 객체의 생명주기를 어떻게 관리하나
- Factory가 관리
💡 Factory Provider Pattern을 통해 객체를 생성할 때 고려해야 할 점
- 객체의 초기화 방법
💡 Factory Provider Pattern의 구현에서 일반적으로 사용되는 프로그래밍 원칙
- 단일 책임 원칙(SRP)
- 개방-폐쇄 원칙(OCP)
- 의존성 역전 원칙(DIP)