물류관리 앱을 만들고 있다고 상상해보자, 최초의 소스는 `TRUCK`안에 대부분 있을 것이다.
후에 물류관리 앱이 꽤 유명해져서, 해상 물류도 앱에 통합해야 되는 상황이 된다면, 모든 로직에 분기 처리가 들어가야 할 것이다. 아주 좋지 못한 코드가 될 것이다.
기존과 유사한 기능이 추가되는데 조금 다를 때, Factory pattern이 유용하게 사용된다.
Factory Method?
객체 지향 디자인 패턴중 하나이다.
Factory Method는 부모 클래스에서 객체를 생성하기 위한 인터페이스를 제공하지만, 서브 클래스가 생성될 객체의 유형을 변경할 수 있도록 하는 생성 디자인 패턴
Factory Method를 너무 남발하는 것은 프로그램의 엔트로피가 높아질 수 있으므로 패턴의 사용을 주의해야 한다.
Factory Method 구현해보기
다양한 피자를 만드는 프로그램을 구현해보자.
//Our pizzas
function HamAndMushroomPizza(){
var price = 8.50;
this.getPrice = function(){
return price;
}
}
function DeluxePizza(){
var price = 10.50;
this.getPrice = function(){
return price;
}
}
function SeafoodPizza(){
var price = 11.50;
this.getPrice = function(){
return price;
}
}
//Pizza Factory
function PizzaFactory(){
this.createPizza = function(type){
switch(type){
case "Ham and Mushroom":
return new HamAndMushroomPizza();
case "DeluxePizza":
return new DeluxePizza();
case "Seafood Pizza":
return new SeafoodPizza();
default:
return new DeluxePizza();
}
}
}
//Usage
var pizzaPrice = new PizzaFactory().createPizza("Ham and Mushroom").getPrice();
alert(pizzaPrice);
정리 및 느낀 점
Factory Parren은 유용하게 사용되는 경우가 많다.
추후에 비슷한 형식으로 추가된다면, Factory Pattern을 고려해보자.
리펙토링 - 같은 분기처리가 여러번 들어가는 경우 Factory Pattern이 효과적일수 있다.