目次

the Definition of Factory Method Pattern

팩토리 메소드 패턴의 정의는 다음과 같습니다.

팩토리 메소드 패턴 - 팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 
어떤 클래스의 인스턴스를 만들지는 서브 클래스에서 결정하게 만듭니다. 팩토리 메소드 패턴을 
이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것이죠.

다른 모든 팩토리를 쓸 때와 마찬가지로 팩토리 메소드 패턴을 사용하여 구상 형식의 인스턴스를 만드는 작업을 캡슐화 할 수 있습니다.
밑에 있는 클래스 다이어 그램을 보면, Creator 추상 클래스에서 객체를 만들기 위한 메소드, 즉 팩토리 메소드를 위한 인터페이스를 제공한다는 것을 알 수 있습니다.
Creator 추상 클래스에 구현되어 있는 다른 메소드에서는 팩토리 메소드에 의해 생산된 제품을 가지고 필요한 작업을 처리합니다.
하지만 실제 팩토리 메소드를 구현하고 제품(객체 인스턴스)를 만들어내는 일은 서브클래스에서만 할 수 있습니다.

위에 있는 정의에도 나와 있지만, 다른 개발자들이 “팩토리 메소드 패턴에서는 어떤 클래스의 인스턴스를 만들지를 서브 클래스에서 결정한다”라고 하는 얘기를 종종 듣게 될 것입니다.
여기에서 “결정한다”라는 표현을 쓰는 이유는, 이 패턴을 사용할 때 서브클래스에서 실행중에 어떤 클래스의 인스턴스를 만들지를 결정하기 때문이 아니라, 생산자 클래스 자체가 실제 생산될 제품에 대한 사전지식이 전혀 없이 만들어지기 때문입니다.
사실 더 정확하게 표현하자면, 사용하는 서브 클래스에 따라 생산되는 객체 인스턴스가 결정될 것입니다.

Factory Method

An Example of Factory Method Pattern

팩토리 메소드 패턴의 예로 피자의 주문을 처리하는 피자가게를 팩토리 메소드 패턴을 이용해 구현해 보고자 합니다.
뉴욕풍 피자를 만드는 뉴욕피자가게와 시카고풍 피자를 만드는 시카고피자가게를 만들고자 합니다.
PizzaStore에서는 어떤 피자를 만들지는 모릅니다. 어떤 피자를 만들지는 순전히 뉴욕피자가게(NYPizzaStore)와 시카고피자가게(ChicagoPizzaStore)가 결정하게 됩니다. Pizza Store

the Definition of Abstract Factory Pattern

팩토리 메소드 패턴의 형제인 추상 팩토리 패턴을 소개합니다. 정의는 다음과 같습니다.

추상 팩토리 패턴 - 추상 팩토리 패턴에서는 인터페이스를 이용하여 서로 연관된,
또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성할 수 있습니다.

추상 팩토리 패턴을 사용하면, 클라이언트에서 추상 인터페이스를 통해서 일련의 제품들을 공급받을 수 있습니다.
이때, 실제로 어떤 제품이 생산되는지는 전혀 알 필요도 없습니다. 따라서 클라이언트와 팩토리에서 생산되는 제품을 분리시킬 수 있습니다.
클래스 다이어 그램을 살펴봅시다.

Abstract Factory

An Example of Abstract Factory Pattern

이제 마지막으로 추상 팩토리 패턴을 구현한 예를 살펴봅시다.
위의 클래스 다이어 그램에서 Client에 해당되는 것이 PizzaStore의 예에서 나온 NYPizzaStoreChicagoPizzaStore에 해당됩니다.

Pizza Factory