728x90
반응형
Factory Method Pattern
팩토리 메서드 패턴은 객체 생성의 책임을 서브클래스로 위임하여, 객체 생성을 캡슐화하는 디자인 패턴입니다. 이 패턴을 사용하면 객체 생성 로직을 별도의 메서드로 분리하여 유지보수를 용이하게 하고, 확장성을 높일 수 있습니다.
1. 팩토리 메서드 패턴의 핵심 구조
- Product (제품): 생성될 객체의 인터페이스
- ConcreteProduct (구체적인 제품): 인터페이스를 구현하는 실제 클래스
- Creator (창조자, 팩토리 역할): 팩토리 메서드를 선언하는 추상 클래스 또는 인터페이스
- ConcreteCreator (구체적인 창조자): 팩토리 메서드를 오버라이딩하여 실제 객체를 생성하는 클래스
2. 동작 흐름
- 클라이언트는 Creator 클래스를 사용하여 객체를 요청합니다.
- Creator 클래스는 팩토리 메서드를 호출하여 적절한 Product 객체를 생성합니다.
- 생성된 객체는 Product 인터페이스를 구현하는 ConcreteProduct 클래스의 인스턴스입니다.
- 클라이언트는 Product 인터페이스를 통해 객체를 사용합니다.
3. 음식 주문 시스템
1) Product (제품 인터페이스)
public interface Food {
void prepare();
}
2) ConcreteProduct (구체적인 제품 클래스)
public class Pizza implements Food {
@Override
public void prepare() {
System.out.println("피자 준비 중");
}
}
public class Burger implements Food {
@Override
public void prepare() {
System.out.println("햄버거 준비 중");
}
}
3) Creator (팩토리 클래스)
abstract class FoodFactory {
abstract Food createFood();
public void orderFood() {
Food food = createFood();
food.prepare();
}
}
4) ConcreteCreator (구체적인 팩토리 클래스)
public class BurgerFactory extends FoodFactory {
@Override
Food createFood() {
return new Burger();
}
}
public class PizzaFactory extends FoodFactory {
@Override
Food createFood() {
return new Pizza();
}
}
5) Main (클라이언트 코드 실행)
public class FactoryMethodMain {
public static void main(String[] args) {
FoodFactory pizzaFactory = new PizzaFactory();
pizzaFactory.orderFood();
FoodFactory burgerFactory = new BurgerFactory();
burgerFactory.orderFood();
}
}
4. 팩토리 메서드 패턴의 장단점
✅ 장점
✅ 객체 생성 코드의 캡슐화: 클라이언트 코드가 구체적인 클래스를 직접 참조하지 않음
✅ 유연한 확장성: 새로운 제품이 추가될 때 기존 코드를 수정하지 않고 확장 가능
✅ 의존성 감소: 인터페이스 기반 설계를 통해 결합도를 낮출 수 있음
❌ 단점
❌ 클래스 수 증가: 각 제품마다 별도의 팩토리 클래스를 생성해야 하므로 코드가 복잡해질 수 있음
❌ 단순한 객체 생성 시 오버헤드 발생: 단순한 객체 생성에는 코드가 불필요하게 늘어날 수 있음
728x90
반응형
'JAVA' 카테고리의 다른 글
데코레이터(Decorator) 패턴 (1) | 2025.01.26 |
---|---|
옵저버 패턴 이해하기 (1) | 2025.01.20 |
전략 패턴(Strategy Pattern) (0) | 2025.01.12 |