Day 11 – Factory Method Pattern

팩토리 메소드 디자인 패턴은 객체 생성 코드를 클라이언트 코드에 긴밀하게 연결하지 않고도 객체를 생성할 수 있도록 하는 생성 패턴입니다. 이는 슈퍼클래스에서 객체를 생성하기 위한 인터페이스를 정의하지만 하위 클래스가 인스턴스화할 클래스를 결정할 수 있도록 합니다.


Factory Pattern과 Factory Method Pattern의 차이.

팩토리 패턴과 팩토리 메소드 패턴이 다르다는 점을 말 하는 것으로 시작하겠습니다. 둘 다 객체 생성과 관련되어 있지만 서로 다른 용도로 사용되며 구조도 다릅니다.

Factory Design Pattern (Simple Factory Pattern)

  • 목적: 클라이언트 코드를 개체 생성 코드에서 분리하여 개체 생성 프로세스를 캡슐화합니다.
  • 구조:
    • Factory: 객체를 생성하는 클래스입니다. 이 클래스는 클라이언트에 객체를 반환하는 메서드를 제공합니다.
    • 제품: 생성되는 객체의 유형을 나타내는 추상 클래스 또는 인터페이스입니다. 구체적인 객체는 이 인터페이스를 구현합니다.
    • ConcreteProduct: 생성되는 실제 개체입니다. Factory는 이러한 객체를 생성하고 반환합니다.
  • 사용 예: 예를 들어 다양한 유형의 모양을 생산하는 공장을 만들 수 있습니다. Factory는 클라이언트에게 원, 직사각형 또는 삼각형을 반환할 수 있습니다.

Factory Method Design Pattern

  • 목적: 객체 생성을 하위 클래스로 연기합니다. 슈퍼클래스는 객체를 생성하기 위한 인터페이스를 정의하고, 서브클래스는 객체를 생성하기 위해 이 인터페이스를 구현합니다.
  • 구조:
    • Creator(Abstract Creator): 객체 생성을 담당하는 추상 클래스 또는 인터페이스입니다. 팩토리 메소드를 선언합니다.
    • ConcreteCreator: 실제로 객체를 생성하는 클래스입니다. 객체를 반환하는 팩토리 메서드를 구현합니다.
    • 제품: 생성되는 객체의 유형을 나타내는 추상 클래스 또는 인터페이스입니다. 구체적인 객체는 이 인터페이스를 구현합니다.
  • 사용 예: 이 프로젝트에 설명된 신용 카드 예는 팩토리 메소드 디자인 패턴의 인스턴스입니다. 각 신용카드 유형에는 해당하는 Factory가 있으며, Factory 메서드는 특정 신용카드를 생성합니다.

Class Diagram


Code

ICreditCard.cs
public interface ICreditCard
{
    string GetCardType();
    double GetCreditLimit();
    double GetAnnualCharge();
}
C#
MoneyBack.cs
public class MoneyBack : ICreditCard
{
    public string GetCardType() => "MoneyBack";
    public double GetCreditLimit() => 15000;
    public double GetAnnualCharge() => 500;
}
C#
Platinum.cs
public class Platinum : ICreditCard
{
    public string GetCardType() => "Platinum";
    public double GetCreditLimit() => 50000;
    public double GetAnnualCharge() => 3000;
}
C#
Titanium.cs
public class Titanium : ICreditCard
{
    public string GetCardType() => "Titanium";
    public double GetCreditLimit() => 25000;
    public double GetAnnualCharge() => 1500;
}
C#
CreditCardFactory.cs
public abstract class CreditCardFactory
{
    public abstract ICreditCard CreateProduct();
}
C#
MoneyBackFactory.cs
public class MoneyBackFactory : CreditCardFactory
{
    public override ICreditCard CreateProduct() => new MoneyBack();
}
C#
PlatinumFactory.cs
public class PlatinumFactory : CreditCardFactory
{
    public override ICreditCard CreateProduct() => new Platinum();
}
C#
TitaniumFactory.cs
public class TitaniumFactory : CreditCardFactory
{
    public override ICreditCard CreateProduct() => new Titanium();
}
C#
Program.cs
var moneyBackFactory = new MoneyBackFactory();
var moneyBackCard = moneyBackFactory.CreateProduct();
Console.WriteLine($"Card Type: {moneyBackCard.GetCardType()}, Limit: {moneyBackCard.GetCreditLimit()}, Annual Charge: {moneyBackCard.GetAnnualCharge()}");
C#

Run


요약

이번 글에서는 팩토리 메소드 디자인 패턴(Factory Method Design Pattern)에 대해 알아보았습니다. 이 패턴은 개체 생성을 하위 클래스에 위임하여 클라이언트 코드와 개체 생성 코드를 분리하는 데 도움이 됩니다. 각 패턴은 특정 상황에 맞게 유연하게 사용할 수 있으며 코드의 확장성과 유지 관리성을 향상시키는 데 기여합니다.


Links

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다