팩토리 메서드 패턴

SeungJoo
|2025. 2. 17. 23:53
728x90
반응형

Factory Method Pattern

팩토리 메서드 패턴은 객체 생성의 책임을 서브클래스로 위임하여, 객체 생성을 캡슐화하는 디자인 패턴입니다. 이 패턴을 사용하면 객체 생성 로직을 별도의 메서드로 분리하여 유지보수를 용이하게 하고, 확장성을 높일 수 있습니다.

1. 팩토리 메서드 패턴의 핵심 구조

  1. Product (제품): 생성될 객체의 인터페이스
  2. ConcreteProduct (구체적인 제품): 인터페이스를 구현하는 실제 클래스
  3. Creator (창조자, 팩토리 역할): 팩토리 메서드를 선언하는 추상 클래스 또는 인터페이스
  4. ConcreteCreator (구체적인 창조자): 팩토리 메서드를 오버라이딩하여 실제 객체를 생성하는 클래스

2. 동작 흐름

  1. 클라이언트는 Creator 클래스를 사용하여 객체를 요청합니다.
  2. Creator 클래스는 팩토리 메서드를 호출하여 적절한 Product 객체를 생성합니다.
  3. 생성된 객체는 Product 인터페이스를 구현하는 ConcreteProduct 클래스의 인스턴스입니다.
  4. 클라이언트는 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