Closed changhwan77 closed 5 months ago
아주 간단한 Factory 개념을 직접 구현해봤습니다.
[ 변경 전 ]
Pizza 클래스에서 orderPizza 메서드를 사용.
이 때 인자로 문자열 타입의 피자 타입을 받아 분기 처리를 통해 타입에 맞는 피자 객체를 생성해서 반환하였음.
Pizza Pizza::orderPizza (string type) { Pizza pizza; // type을 문자열로 받아서 그에 맞는 객체를 pizza 변수에 할당 // 만약에 이외의 피자가 추가된다면? // ~ if (type == "cheese") { pizza = CheesePizza(); } else if (type == "greek") { pizza = GreekPizza(); } else if (type == "pepperoni") { pizza = PepperoniPizza(); } // 여기 부분을 하드 코딩해서 계속 바꿔줘야하는 단점이 있음. pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; }
[ 변경 후 ]
책 p.150에 따르면 다음과 같은 질문을 함.
[ main.cpp ]
int main() { // 치즈 피자 주문하기 PizzaFactory* pizzaFactory = new CheesePizzaFactory(); PizzaStore* pizzaStore = new PizzaStore(pizzaFactory); pizzaStore->orderPizza(); // 시카고 피자 주문 pizzaStore->setPizzaFactory(new ChicagoPizzaFactory()); pizzaStore->orderPizza(); // 뉴욕 피자 주문 pizzaStore->setPizzaFactory(new NewYorkPizzaFactory()); pizzaStore->orderPizza(); delete pizzaStore; return 0; };
[ 출력 결과 ]
💡 아이디어: Factory를 인터페이스로 만들어 각 피자 타입을 만드는 객체 공장을 상속받아 사용해보면 어떨까? 에서 착안.
아주 간단한 Factory 개념을 직접 구현해봤습니다.
[ 변경 전 ]
Pizza 클래스에서 orderPizza 메서드를 사용.
이 때 인자로 문자열 타입의 피자 타입을 받아 분기 처리를 통해 타입에 맞는 피자 객체를 생성해서 반환하였음.
[ 변경 후 ]
책 p.150에 따르면 다음과 같은 질문을 함.
[ main.cpp ]
[ 출력 결과 ]
💡 아이디어: Factory를 인터페이스로 만들어 각 피자 타입을 만드는 객체 공장을 상속받아 사용해보면 어떨까? 에서 착안.