핵심 인사이트 (3줄 요약)
- 객체군(Family) 생성: 서로 연관되거나 의존적인 여러 객체를 구체적인 클래스 지정 없이 일괄 생성하는 인터페이스를 제공함.
- 제품군 일관성 보장: 클라이언트가 특정 제품군(예: Mac용 버튼+텍스트박스)만 사용하도록 강제하여 객체 간 호환성 문제를 예방함.
- 확장성 및 유연성: 새로운 제품군 추가 시 기존 클라이언트 코드를 수정하지 않고 팩토리만 교체하여 유연하게 대응 가능함 (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)|
+-------------------+ +-------------------+ +-------------------+ +-------------------+
- 주요 역할:
- AbstractFactory: 모든 제품 생성 메서드의 인터페이스 선언.
- ConcreteFactory: 특정 제품군(Family)을 생성하는 실제 로직 구현.
- AbstractProduct: 제품군 내 개별 제품에 대한 인터페이스 선언.
- 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줄 비유 설명
- 레고 세트(팩토리)를 '해적 세트'로 고르면 칼과 보물상자(객체군)가 나오고, '우주 세트'로 고르면 레이저총과 로봇이 나와요.
- 해적 칼과 우주 로봇을 실수로 섞어 쓰지 않게 세트로 딱 맞춰서 꺼내주는 마법 상자예요.
- 세트 이름만 바꾸면 내용물이 싹 바뀌니까 정말 편해요!