무덤 팩토리 메소드 패턴이란?
– 개체를 만들 때 클래스의 인스턴스를 만듭니다. 하위 클래스에 의해 결정됨디자인 패턴
– 하나의 슈퍼클래스에 여러 서브클래스가 있는 경우 입력에 따라 하나의 서브클래스 인스턴스를 리턴한다.
– 다양한 구체화그 중에는 특정 구현을 만드는 다양한 방법이 있습니다. 공장제공하다
ㅁ 이용상황
– 생성할 객체의 클래스를 예측할 수 없는 경우
– 생성된 개체를 설명하는 책임을 하위 클래스에 할당하려는 경우
– 객체 생성 책임을 보조 하위 클래스 중 하나에 위임,
어떤 하위 클래스가 위임되고 있는지에 대한 정보를 최소화할 때
ㅁ 장점과 단점
(장점)
– 기존 코드 수정 없이 인스턴스 생성 및 확장 가능
(불리)
– 클래스가 많을 수 있음
– 틀림없이 공장 클래스를 상속 구체화만들어야 한다
ㅁ 예제 코드
공장: 셰이프크리에이터 (CircleCreator, TriangleCreator)
구현 : 모양 (원, 삼각형)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FactoryMethod
{
class Program
{
static void Main(string() args)
{
CircleCreator cirCreator = new CircleCreator();
TriangleCreator triCreator = new TriangleCreator();
Shape circle = cirCreator.Create();
Console.WriteLine("created 01 -----> {0}", circle);
Shape triangle = triCreator.Create();
Console.WriteLine("created 02 -----> {0}", triangle);
}
}
public abstract class Shape
{
public abstract double GetArea();
}
public class Circle : Shape
{
public double Radius;
public override double GetArea()
{
return 2 * Math.PI * Radius;
}
}
public class Triangle : Shape
{
public override double GetArea()
{
return 0;
}
}
public abstract class ShapeCreator
{
public abstract Shape Create();
}
public class CircleCreator : ShapeCreator
{
public override Shape Create()
{
return new Circle();
}
}
public class TriangleCreator : ShapeCreator
{
public override Shape Create()
{
return new Triangle();
}
}
}
객체를 생성하는 부분은 다음과 같이 작성할 수 있습니다.
Shape circle = new CircleCreator().Create();
Console.WriteLine("created 01 -----> {0}", circle);
Shape triangle = new TriangleCreator().Create();
Console.WriteLine("created 02 -----> {0}", triangle);

ㅁ 개인적인 생각
– 몇 개의 개체를 생성해야 하는 경우 생성할 때마다 Creator의 인스턴스를 생성해도 괜찮을 것 같습니다.
– 많은 객체를 생성해야 하는 경우 Creator의 인스턴스를 한 번만 생성한 후 사용하는 것이 좋을 것 같습니다.