개발자의 길

[Design pattern] 팩토리 메서드 패턴 ( Factory method pattern )

토아드 2020. 8. 30. 17:07
반응형

코딩을 하다 보면, 내가 만들지 않은 다른 클래스를 사용 할 때 맨 처음 하는 것은 객체 생성이다.

 

객체 생성을 하고, 해당 객체를 온전하게 사용하기 위해서는 해당 클래스에대한 설명을 듣고, 함수 사용 방법을 익힌 뒤 생성된 객체를 통해 함수를 호출할 것이다.

피자를 만든다고 예를 들면, 아래와 같이 말이다.

 

Pizza *myPizza.= new PotatoPizza();

myPizza.prepare();

myPizza.bake();

myPizza.cut();

myPizza.box();

 

여기까지는 좋다. 하지만 실수는 언제나 있기 마련이다.

1) Pizza 클래스를 사용하는 클라이언트가 prepare() 함수를 호출하는 것을 뺴먹었다면? 어떤 피자는 자르면 안 되는데 cut() 함수를 호출해 버렸다면?

2) 다른 문제점이 생겨서 PotatoPizza() 클래스를 사용하는 경우에 .addPotato() 함수를 따로 호출하도록 만들어야 한다면?

3) 또, 사용하는 클라이언트 측에서는 어떤 피자 클래스가 있는지 알아야 된다.

 

위 문제를 해결하기 위해서 나온 것이 팩토리 메서드 패턴이다. 패턴은 아래와 같다.

 

출처 : 위키백과

위 이미지에서는 Product 가 Pizza 가 될 것이고, Pizza 를 만드는 함수를 감싸는 역할을 하는 것이 Creator 가 된다. 이때 우리가 쓸 Creator 를 PizzaStore() 라고 한다면, 코드는 아래와 같이 변할 수 있다.

 

PizzaStore *koreanPizzaStore = new KoreanPizzaStore();

Pizza * myPizza = koreanPizzaStore()->CreatePotatoPizza(); //(return PotatoPizza )

 

이렇게 되면, 클라이언트에서는 어떤 Pizza 클래스들이 있는지 일일히 찾아볼 필요도 없으며, PotatoPizza 를 만들기 위해 수정사항이 생긴다 해도 클라이언트 측에서는 PotatoPizza 에 대한 구현이 어떻게 되어있는지 알 필요도 없게된다.

 

반응형