팩토리메소드 패턴(Factory Method Pattern)
디자인패턴 공부하기
  • JavaScript

팩토리메소드 패턴(Factory Method Pattern)

비슷한 객체를 공장에서(팩토리) 찍어내듯이 반복적으로 생성할 수 있게 하는 패턴을 말한다.

아래의 예제를 살펴보자

const cafeOrder = type => {
  let orderItem;
  
  if (type === 'coffee') {
    orderItem = new CoffeeOrder();
  } else if (type === 'bread') {
    orderItem = new BreadOrder();
  } else if (type === 'juice') {
    orderItem = new JuiceOrder();
  }
  
  orderItem.make();
  orderItem.box();

  return orderItem;
};

이와같은 코드가 있다고 가정해보자.
주문이 들어오는 type에 따라 orderItem을 생성하고, 만들고(make), 포장하고(box) 고객에게 돌려주는(return) 간단한 코드이다.

하지만 위 코드는 구상 클래스로 구현되어있어 커피가게가 커져서 type이 더 추가되었을 때 코드변화에 대응하기 안좋은 코드이다.
즉 변화에 닫힌코드 라고 할 수 있다.

코드를 구현할 때에는 변하는 부분과 변하지 않는 부분을 분리해야한다.
위 코드에서 변하는 부분은 어디일까.

이렇게 고쳐보자

const cafeOrder = type => {
  let orderItem = createOrderItem(type);
  
  orderItem.make();
  orderItem.box();

  return orderItem;
};

const createOrderItem = type => {
  let orderItem;
    
    if (type === 'coffee') {
      orderItem = new CoffeeOrder();
    } else if (type === 'bread') {
      orderItem = new BreadOrder();
    } else if (type === 'juice') {
      orderItem = new JuiceOrder();
    }
    
    return orderItem;
}

createOrderItem 함수를 추가하여 변하는 코드를 분리했다.

쉬운 예제를 통해 팩토리패턴에 대해 살펴보았다.

추상된 것에 의존하도록 만들어야한다. 구상된 것에 의존하며 안된다