핵심 인사이트 (3줄 요약)

  1. 객체군(Family) 생성: 서로 연관되거나 의존적인 여러 객체를 구체적인 클래스 지정 없이 일괄 생성하는 인터페이스를 제공함.
  2. 제품군 일관성 보장: 클라이언트가 특정 제품군(예: Mac용 버튼+텍스트박스)만 사용하도록 강제하여 객체 간 호환성 문제를 예방함.
  3. 확장성 및 유연성: 새로운 제품군 추가 시 기존 클라이언트 코드를 수정하지 않고 팩토리만 교체하여 유연하게 대응 가능함 (OCP 준수).

Ⅰ. 개요 (Context & Background)

  • 정의: GoF(Gang of Four) 생성 패턴 중 하나로, 다양한 제품군 중 하나를 선택하여 시스템을 구성할 때 제품 생성 과정을 캡슐화하는 패턴임.
  • 필요성: 시스템이 여러 제품군 중 하나로 구성되어야 하고, 제품들이 서로 함께 사용되어야 할 때 구체 클래스에 의존하지 않기 위해 사용됨.

Ⅱ. 아키텍처 및 핵심 원리 (Deep Dive)

  • 핵심 원리: 추상 인터페이스를 통해 객체를 생성하며, 클라이언트는 어떤 구체 클래스가 생성되는지 알 필요가 없음.
[ Abstract Factory Pattern Structure ]

      +-------------------------+              +-------------------------+
      |    AbstractFactory      |              |     AbstractProductA    |
      +-------------------------+              +-------------------------+
      | + CreateProductA()      |              |                         |
      | + CreateProductB()      |              +-------------------------+
      +-------------------------+                        ^       ^
                   ^                                     |       |
         +---------+---------+                 +---------+       +---------+
         |                   |                 |                           |
 +-------------------+ +-------------------+ +-------------------+ +-------------------+
 |  ConcreteFactory1 | |  ConcreteFactory2 | |  ProductA1        | |  ProductA2        |
 +-------------------+ +-------------------+ +-------------------+ +-------------------+
 | + CreateProductA()| | + CreateProductA()| | (Part of Family 1)| | (Part of Family 2)|
 +-------------------+ +-------------------+ +-------------------+ +-------------------+
  • 주요 역할:
    1. AbstractFactory: 모든 제품 생성 메서드의 인터페이스 선언.
    2. ConcreteFactory: 특정 제품군(Family)을 생성하는 실제 로직 구현.
    3. AbstractProduct: 제품군 내 개별 제품에 대한 인터페이스 선언.
    4. ConcreteProduct: 구체적인 제품 객체.

Ⅲ. 융합 비교 및 다각도 분석 (Comparison & Synergy)

구분팩토리 메서드 (Factory Method)추상 팩토리 (Abstract Factory)
생성 대상단일 객체 (Product)연관된 객체 군 (Family of Products)
구현 방식상속(Inheritance)을 통한 서브클래싱객체 합성(Composition) 및 위임
추상화 수준낮음 (하나의 메서드)높음 (전체 팩토리 클래스)
장점구현이 단순함제품군 간의 제약/일관성 유지가 쉬움

Ⅳ. 실무 적용 및 기술사적 판단 (Strategy & Decision)

  • 실무 적용: OS별 UI 컴포넌트(윈도우 스타일 vs 맥 스타일), 데이터베이스 접근 계층(MySQL용 DAO군 vs Oracle용 DAO군) 등 '테마'나 '환경'에 따른 객체군 교체에 사용함.
  • 기술사적 판단: 제품군이 자주 추가되는 경우 유리하지만, 제품군 내의 새로운 제품 종류(예: 버튼, 텍스트박스 외에 슬라이더 추가)가 늘어나면 모든 팩토리를 수정해야 하는 '추상 팩토리의 경직성'에 유의해야 함.

Ⅴ. 기대효과 및 결론 (Future & Standard)

  • 기대효과: 구체 클래스와 클라이언트를 분리하여 코드 재사용성을 높이고, 제품군 변경 시 실수를 원천 차단함.
  • 결론: 추상 팩토리는 객체 지향의 핵심인 '추상화'를 생성 로직에 적용하여 시스템의 유연성과 일관성을 동시에 확보하는 고수준 설계 도구임.

📌 관련 개념 맵 (Knowledge Graph)

  • 상위 개념: 생성 패턴 (Creational Patterns).
  • 유사 개념: 팩토리 메서드, 빌더, 프로토타입.
  • 연관 패턴: 싱글톤 (팩토리는 보통 싱글톤으로 구현됨).

👶 어린이를 위한 3줄 비유 설명

  1. 레고 세트(팩토리)를 '해적 세트'로 고르면 칼과 보물상자(객체군)가 나오고, '우주 세트'로 고르면 레이저총과 로봇이 나와요.
  2. 해적 칼과 우주 로봇을 실수로 섞어 쓰지 않게 세트로 딱 맞춰서 꺼내주는 마법 상자예요.
  3. 세트 이름만 바꾸면 내용물이 싹 바뀌니까 정말 편해요!