본문 바로가기
SWE/C++ OOP

[디자인 패턴] Simple Factory 심플팩토리

by S나라라2 2021. 7. 14.
반응형

 

 

팩토리 패턴에는 다음과 같이 두 가지 패턴이 있다.

- 팩토리 메소드 패턴 Factory method Pattern

- 추상 팩토리 패턴Abstract Factory Pattern

 

이 두 가지 패턴을 공부하기위해, 두 패턴의 베이스인 'Simple Factory'에 대해 공부해보자.

 

바로 팩토리 메소드 패턴, 추상 팩토리 패턴에 대해 알아보고 싶다면 글 가장 아래 링크에 정리해두었다.

 


심플 팩토리 Simple Factory

Simple factory는 팩토리 메소드 패턴과 추상 팩토리 패턴의 베이스가 된다.

참고로, simple factory는 디자인 '패턴'이라고 할 수는 없고, oop에서 자주 쓰이는 관용구라고 보면 된다.

이걸 이해해야 다른 factory pattern들의 이해도 쉬워진다.

 

Simple Factory 란?

객체를 생성해내는 공장을 따로 두는 것이다.

즉, 객체 생성 부분을 전담하는 클래스가 따로 있는 것이다. 

 

Pizza 객체 만드는 것을 예로 들어보자.

다양한 종류의 Pizza들(객체)이 있고, 피자 가게(Pizza Store)에 피자 주문(orderPizza)이 들어오면 가게에서 직접 객체(Pizza)를 생성할 수도 있다.

 

그러나 심플 팩토리에서는 이 객체의 생성만을 처리하는 공장(Pizza factory)을 따로 두는 것이다.

 

simple factory

 

public class PizzaStore {
	SimplePizzaFactory factory;
    
    // PizzaStore 생성자의 파라미터로 factory 객체를 전달 받는다.
    public PizzaStore (SimplePizzaFactory factory) {
		this.factory = factory;
    }
    
    public Pizza orderPizza (String type) {
    	Pizza pizza;
        
        pizza = factory.createPizza(type); // 팩토리를 써서 pizza 객체를 만든다.
        
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        
        return pizza;
    }
}

피자 가게에 피자 주문(orderPizza)이 들어오면, 피자 객체를 생성하는 작업만 factory로 넘기고

그 이후 작업(prepare, back, cut, box)은 피자 가게에서 이어서 작업한다.

 

public class PizzaFactory
{
	public Pizza createPizza(String type)
    {
    	Pizza pizza = null;
        
        if( type.equals("cheese") )
        	pizza = new CheesePizza();
        else if( type.equals("pepperoni") )
        	pizza = new PepperoniPizza();
        else if( type.equals("calm") )
        	pizza = new ClamPizza();
        
        return pizza;
    }
}

Pizza factory는 전달받은 매개변수를 바탕으로 피자 종류를 결정하여, 피자를 생성한다.

 

그렇다면 어떤 이점을 기대하고 simple factory를 사용하는걸까?

 

[장점] Simple factory 사용의 장점

위의 예시 pizza 코드는 현재 매우 단순하고 짧아서 큰 이점을 못느낄 수 있다.

그치만 객체를 받아서 활용해야 하는 복잡하고 다양한 기능들이 추가되면 심플 팩토리의 진가를 발휘한다. 

피자를 생성하는 작업을 한 클래스에 캡슐화시켜 놓았기 때문에, 수정 사항이 있을 때 여기저기 다 들어가서 고칠 필요 없이 factory class 하나만 고치면 되기 때문이다. 즉 수정이 용이할 것이고 이것은 유지 보수 비용이 적게 드는 것과 직결될 것이다.


 

 

https://flower0.tistory.com/415

 

[디자인 패턴] Factory Method Pattern 팩토리 메소드 패턴

팩토리 메소드 패턴의 기조인 '심플 팩토리'는 아래 링크에 정리해두었다. https://flower0.tistory.com/414 [디자인 패턴] Simple Factory 심플팩토리 팩토리 패턴에는 다음과 같이 두 가지 패턴이 있다. - 팩

flower0.tistory.com

https://flower0.tistory.com/416

 

[디자인 패턴] Abstract Factory Pattern 추상 팩토리 패턴

추상팩토리패턴을 공부하기 전에 '심플 팩토리'와 '팩토리 메소드 패턴'을 먼저 공부하면, 이해가 수월할 것이다. https://flower0.tistory.com/414 [디자인 패턴] Simple Factory 심플팩토리 팩토리 패턴에는

flower0.tistory.com

 

반응형