프로그래밍/C#

[C#] 디자인패턴 - Abstract Factory Pattern

흔한티벳여우 2023. 8. 15. 14:12
반응형

Abstract Factory Pattern은 연관된 객체들의 그룹 또는 의존 객체들의 집합을 생성하기 위한 인터페이스를 제공합니다. 이는 상호 교환 가능한 객체 집합을 생성하는 것을 목표로 하며, 객체 생성의 구체적인 클래스를 숨긴 채 각 집합의 공통된 테마나 속성에 따라 객체를 생성합니다.

 

기본 구조

Abstract Factory Pattern은 주로 다음 구성 요소로 이루어져 있습니다

  1. AbstractFactory: 모든 구체 팩토리의 공통 인터페이스입니다.
  2. ConcreteFactory: 실제 객체 집합을 생성하는 구체적인 팩토리입니다.
  3. AbstractProduct: 생성되는 제품의 공통 인터페이스입니다.
  4. ConcreteProduct: 실제 생성되는 제품입니다.

언제 사용해야 하는가?

  1. 시스템이 제품 집합 중 하나를 독립적으로 생성해야 할 때
  2. 시스템의 구성에 여러 제품 집합 중 하나를 동적으로 설정하려는 경우
  3. 제품의 종류와 구조를 클라이언트에서 분리하려 할 때

As-Is 예시 (Abstract Factory Pattern 사용 전)

public class WindowsButton
{
    // Windows 버튼 생성 로직
}

public class WindowsCheckbox
{
    // Windows 체크박스 생성 로직
}

public class MacButton
{
    // Mac 버튼 생성 로직
}

public class MacCheckbox
{
    // Mac 체크박스 생성 로직
}

To-Be 예시 (Abstract Factory Pattern 사용 후)

// AbstractFactory & AbstractProduct
public interface IUIFactory
{
    IButton CreateButton();
    ICheckbox CreateCheckbox();
}

public interface IButton
{
    void Render();
}

public interface ICheckbox
{
    void Render();
}

// ConcreteFactory & ConcreteProduct
public class WindowsUIFactory : IUIFactory
{
    public IButton CreateButton()
    {
        return new WindowsButton();
    }

    public ICheckbox CreateCheckbox()
    {
        return new WindowsCheckbox();
    }
}

public class MacUIFactory : IUIFactory
{
    public IButton CreateButton()
    {
        return new MacButton();
    }

    public ICheckbox CreateCheckbox()
    {
        return new MacCheckbox();
    }
}

public class WindowsButton : IButton
{
    public void Render()
    {
        // Windows 버튼 렌더링 로직
    }
}

public class WindowsCheckbox : ICheckbox
{
    public void Render()
    {
        // Windows 체크박스 렌더링 로직
    }
}

public class MacButton : IButton
{
    public void Render()
    {
        // Mac 버튼 렌더링 로직
    }
}

public class MacCheckbox : ICheckbox
{
    public void Render()
    {
        // Mac 체크박스 렌더링 로직
    }
}

 

반응형