디자인 패턴 - 04. 팩토리 패턴

강준혁·2022년 10월 1일
0

디자인패턴

목록 보기
4/6

팩토리 패턴

팩토리 패턴은 객체에 생성과 관련된 부분을 별도의 객체에게 위임함으로서 책임을 분배하는 패턴이다.

이는 팩토리 메서드 패턴과 추상 팩토리 패턴으로 나뉘기도 하는데, 결국 객체의 생성을 위임한다는 목적은 같으나 상황에 따른 구현 방식의 차이만 있을 뿐이다.

팩토리 패턴의 필요성

다양한 피자를 만드는 경우를 생각해보자.


abstract class Pizza {
  public void prepare();
  public void bake();
  public void cut();
  public void box();
}

class CheesePizza {}
class BaconPizza {}

class PizzaStore {
  private Pizza pizza
  
  public Pizza order(String type) {
    if (type == "cheese") {
      pizza = new CheesePizza();
    } else if (type == "bacon") {
      pizza = new BaconPizza();
    }
    
    pizza.prepare();
    pizza.bake();
    pizza.cut();
    pizza.box();
    return pizza;
  }  
}

위와같이 구현할 경우 피자의 타입이 늘어날 때마다 계속해서 주문 코드가 수정되어야 한다. 이는 PizzaStore가 각 피자 타입의 구체적인 클래스에 의존함으로서 생기는 문제이다.

또한 PizzaStore 클래스는 피자의 타입의 변경/추가와 피자 주문 프로세스의 변경/추가 두가지 책임을 모두 맡고있다.

팩토리 패턴의 적용

PizzaFactory 에게 객체 생성에 대한 책임을 위임한다.

class PizzaFactory {
  public Pizza createPizza(String type) {
    if (type == "cheese") {
      pizza = new CheesePizza();
    } else if (type == "bacon") {
      pizza = new BaconPizza();
    }
  }
}

class PizzaStore {
  private PizzeFactory pizzaFatory;
  
  public Pizza order(String type) {
    Pizza pizza = pizzaFactory.createPizza();
    ...
  }  
}
profile
백엔드 개발자

0개의 댓글