Factory Pattern (a.k.a Factory class)
2021-07-21 21:57:06
#Design Pattern
Factory Class란? 객체 생성의 책임을 가지고 있는 class이다. *정확히는 Design Pattern은 아니다.
Factory 패턴을 이해하기 위해 예시를 가지고 왔다.
피자 가게를 운영한다고 가정해보자
Pizza orderPizza(String type){
Pizza pizza;
if (type.equals("cheese"){
pizza = new CheesePizza();
})
if (type.equals("greek"){
pizza = new GreekPizza();
})
if (type.equals("pepperoni"){
pizza = new Pepperoni();
})
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
고객으로부터 주문을 받아, 피자 객체를 만든다고 하면 피자 타입에 따라 다른 객체를 생성해주어야 할 것이다.
위 코드에서 변경되는 부분은 객체를 생성하는 부분으로, 별도로 캡슐화할 수 있다.
public class SimplePizzaFactory{
public Pizza createPizza(String type){
Pizza pizza=null;
if (type.equals("cheese"){
pizza = new CheesePizza();
})
if (type.equals("greek"){
pizza = new GreekPizza();
})
if (type.equals("pepperoni"){
pizza = new Pepperoni();
})
return pizza;
}
}
이처럼 객체를 생성해주는 class를 Factory라고 부른다.
사실 Factory Pattern은 엄밀히 말하면 디자인 패턴은 아니라고 한다.
어쨌거나 이렇게 객체를 생성하는 책임을 Factory Class로 캡슐화하였을때 어떤 장점이 있을까?
- 여러 Client에서 사용이 가능하다.
- 객체 생성의 책임이 Factory class로 분리되었음으로 객체 생성관련하여 변경이 생겼을때는 한 곳만 수정하면 된다.
여기서 effective Java Item5 내용을 추가하면
public class PizzaStore{
SimplePizzaFactory factory;
// 생성자를 통해 Factory 를 주입받는다.
public PizzaStore(SimplePizzaFactory factory){
this.factory = factory;
}
// 객체 생성의 책임은 Factory Class에 있다. Client는 단지 이를 이용하여 원하는 인스턴스를 만들어 낸다.
public Pizza orderPizza(String type){
Pizza pizza;
pizza = factory.createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
}
}
- Reference
- Head First Design Patterns: A Brain-Friendly Guide (Head First Design Patterns: A Brain-Friendly Guide)
댓글
이 게시글에 대한 의견을 공유해주세요!
