반응형
🏭 추상 팩토리 패턴(Abstract Factory Pattern)
1. 패턴 개요
추상 팩토리 패턴(Abstract Factory Pattern)은 관련된 객체들의 집합(제품군)을 생성하는 인터페이스를 제공합니다.
구체적인 클래스를 지정하지 않고도 서로 연관된 객체들을 일관성 있게 생성할 수 있습니다.
📌 한 문장 요약:
"구체적인 클래스에 의존하지 않고, 관련 있는 객체들을 일관되게 생성할 수 있게 해주는 패턴"
2. 언제 사용하나요?
- 서로 관련 있는 객체들(제품군)을 함께 생성해야 할 때
- 객체 간의 호환성을 보장해야 할 때
- 구체 클래스에 의존하지 않고 추상적으로 객체를 생성하고 싶을 때
- 팩토리 메서드가 여러 개 필요할 때
예시:
- 윈도우용 버튼/체크박스와 맥용 버튼/체크박스는 동시에 만들어야 하는 제품군입니다.
3. 장단점 비교
| 장점 👍 | 단점 👎 |
|---|---|
| 제품군 간의 일관성을 보장 | 클래스 수가 많아질 수 있음 |
| 구체 클래스에 대한 의존성 제거 | 구조가 복잡해질 수 있음 |
| 새로운 제품군 추가가 쉬움 (OCP 만족) | 새로운 제품을 추가할 경우 모든 팩토리 수정 필요 |
4. 예시 코드 (Java)
- OS 별 UI 세팅
1 제품 인터페이스 정의
public interface Button {
void paint();
}
public interface Checkbox {
void check();
}
2 제품 인터페이스 정의
// Windows 계열
public class WindowsButton implements Button {
public void paint() {
System.out.println("윈도우 스타일 버튼");
}
}
public class WindowsCheckbox implements Checkbox {
public void check() {
System.out.println("윈도우 스타일 체크박스");
}
}
// Mac 계열
public class MacButton implements Button {
public void paint() {
System.out.println("맥 스타일 버튼");
}
}
public class MacCheckbox implements Checkbox {
public void check() {
System.out.println("맥 스타일 체크박스");
}
}
3 추상 팩토리 정의
public interface GUIFactory {
Button createButton();
Checkbox createCheckbox();
}
4 구체 팩토리 정의
public class WindowsFactory implements GUIFactory {
public Button createButton() {
return new WindowsButton();
}
public Checkbox createCheckbox() {
return new WindowsCheckbox();
}
}
public class MacFactory implements GUIFactory {
public Button createButton() {
return new MacButton();
}
public Checkbox createCheckbox() {
return new MacCheckbox();
}
}
5 클라이언트 코드
public class Application {
private Button button;
private Checkbox checkbox;
public Application(GUIFactory factory) {
button = factory.createButton();
checkbox = factory.createCheckbox();
}
public void render() {
button.paint();
checkbox.check();
}
public static void main(String[] args) {
GUIFactory factory = new WindowsFactory(); // 또는 new MacFactory()
Application app = new Application(factory);
app.render();
}
}
✅ 핵심 키워드 요약
• 제품군(Product Family): 서로 연관된 객체들 (ex. 버튼 + 체크박스)
• 팩토리의 팩토리: 여러 객체를 생성하는 통합된 팩토리
• 클라이언트는 구체 클래스에 의존하지 않음
• 일관된 UI 스타일 보장 가능
## 📌 Factory Method vs Abstract Factory 비교| 항목 | Factory Method | Abstract Factory |
|---|---|---|
| 목적 | 객체 하나를 생성 | 관련된 객체 집합(제품군)을 생성 |
| 생성 책임 | 서브클래스에서 객체 생성 방식 결정 | 팩토리 객체가 제품군을 생성 |
| 구성 요소 | Creator, Product | AbstractFactory, ConcreteFactory, Product families |
| 유연성 | 단일 객체 생성에 적합 | 제품군 관리에 뛰어남 |
| 복잡도 | 비교적 단순한 구조 | 구조가 더 복잡해짐 |
| 확장성 | 새로운 Product 추가 용이 | 새로운 ProductFamily 추가 용이 |
| 예시 | 버튼 하나 생성 | 버튼 + 체크박스 + 메뉴 등 UI 세트 생성 |
반응형
'Java > 디자인 패턴' 카테고리의 다른 글
| 생성 패턴 _ 프로토타입 패턴 (1) | 2025.07.21 |
|---|---|
| 생성 패턴 _ 빌더 패턴 (0) | 2025.07.21 |
| 생성 패턴_팩토리 메서드 패턴 (0) | 2025.07.18 |
| 생성 패턴 _ 싱글턴 패턴 (0) | 2025.04.23 |