팩토리 패턴 간단 복습


팩토리 메서드 패턴은 생산자(Creator)에서 createPizza()라는 팩토리 메서드를 통해,

*하나의 제품(Product)을 만드는 책임을 **상속(is-a)*을 통해 자식 클래스에게 위임하는 패턴이였다.

public abstract class PizzaStore {

		// 1. 변하지 않는 공정은 final로 통제
    public final Pizza orderPizza(String type) {
        Pizza pizza;
        
				// 2. 변해야 하는 생성은 자식에게 위임
        pizza = createPizza(type)**;**

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();

        return pizza;
    }

		// 3. 자식이 반드시 구현해야 할 팩토리 메서드
    abstract Pizza createPizza(String type);
}

그 예로 PizzaStore(추상 클래스)가 final orderPizza()라는 변하지 않는 공정을 직접 정의하고 통제했다. 그리고 abstract createPizza()라는 변해야 하는 생성 책임NYPizzaStore 같은 구상 생산자에게 위임했다.

이 구조는 공장(PizzaStore)이 구체적인 제품에 직접 의존하지 않고, 오직 추상화 제품(Pizza)에만 의존하도록 만들어 DIPOCP를 만족시켰다.

하지만, 이 설계에도 불구하고 피자 가게에는 아직 해결되지 않은 문제가 존재합니다.

새로운 문제: 재료의 배신 (DIP 2차 위반)


*NYStyleCheesePizza의 코드는 DIP(의존관계 역전 원칙)를 또 다른 수준에서 위반하고 있다.*

(또 다른 수준이라 말은 DIP 위반을 두 번 발견했다는 뜻!)