Design Pattern / Creational

[디자인 패턴] Abstract Factory 패턴

연관된 객체 묶음을 구체 타입 의존 없이 생성하는 패턴입니다.

  • Design Pattern
  • Creational
목차

Abstract Factory

패턴 한 줄 설명

연관된 객체 묶음을 구체 타입 의존 없이 생성하는 패턴입니다.

Unity에서 쓰는 대표 상황

  • 플랫폼별 서비스 묶음을 통째로 교체할 때
  • 테스트용 제품군을 분리할 때

구성 요소 (역할)

  • Abstract Factory
  • Concrete Factory
  • Abstract Product

Unity 예시 (C#)

아래 코드는 위에서 설명한 대표 상황을 Unity 프로젝트 맥락으로 단순화한 예시입니다.

public interface IPlatformServiceFactory
{
    ILoginService CreateLoginService();
    IStoreService CreateStoreService();
}

public sealed class MobilePlatformServiceFactory : IPlatformServiceFactory
{
    public ILoginService CreateLoginService() => new MobileLoginService();
    public IStoreService CreateStoreService() => new MobileStoreService();
}

public sealed class PcPlatformServiceFactory : IPlatformServiceFactory
{
    public ILoginService CreateLoginService() => new PcLoginService();
    public IStoreService CreateStoreService() => new PcStoreService();
}

장점

  • 객체 생성 책임을 정리해 의존성 관리가 쉬워집니다.
  • 환경별/상황별 생성 정책을 유연하게 바꿀 수 있습니다.

주의할 점

  • 간단한 문제에 과한 생성 추상화를 넣지 않아야 합니다.
  • 생성 규칙이 많아질수록 문서와 테스트 동기화가 중요합니다.

동작 다이어그램

플랫폼별 제품군을 동일 인터페이스로 생성하는 흐름입니다.

flowchart LR

  client["Game Client"]
  factory_selector["Platform Factory"]
  mobile_factory["MobileFactory"]
  pc_factory["PcFactory"]
  login["LoginService"]
  store["StoreService"]

  client -->|runtime choice| factory_selector
  factory_selector -->|mobile| mobile_factory
  factory_selector -->|pc| pc_factory
  mobile_factory --> login
  mobile_factory --> store
  pc_factory --> login
  pc_factory --> store

댓글