반응형
1. 추상 팩토리 패턴이란?
추상 팩토리 패턴은 관련된 객체들을 그룹(제품 계열)으로 묶어 생성하는 방법을 제공하는 패턴입니다. 구체적인 클래스에 의존하지 않고 인터페이스를 통해 객체를 생성할 수 있도록 도와줍니다.
주요 특징
- 서로 관련된 제품군을 생성하는 팩토리 인터페이스를 제공합니다.
- 구체적인 팩토리 클래스가 제품 객체를 생성합니다.
- 클라이언트는 구체적인 클래스에 의존하지 않고, 팩토리 인터페이스를 통해 객체를 사용합니다.
2. 팩토리 메서드와의 차이점
팩토리 메서드와 추상 팩토리는 모두 객체 생성을 캡슐화하지만,
다음과 같은 차이점이 있습니다:
팩토리 메서드 | 추상 팩토리 |
---|---|
단일 제품을 생성한다. | 여러 제품 계열을 생성한다. |
서브클래스가 팩토리 메서드를 구현한다. | 인터페이스를 통해 팩토리 그룹을 제공한다. |
구현이 비교적 단순하다. | 구현이 복잡하지만 확장성이 뛰어나다. |
3. 클래스 다이어그램
+-----------------+
| AbstractFactory |
+-----------------+
|
+----------------------+-------------------+
| |
+------------------+ +------------------+
| ConcreteFactoryA | | ConcreteFactoryB |
+------------------+ +------------------+
| |
+------------------+ +------------------+
| ProductA1 | | ProductA2 |
| ProductB1 | | ProductB2 |
+------------------+ +------------------+
설명:
AbstractFactory
: 제품군을 생성하는 인터페이스입니다.ConcreteFactoryA
/ConcreteFactoryB
: 제품군 A와 B를 생성하는 구체 팩토리입니다.ProductA1
,ProductA2
,ProductB1
,ProductB2
: 서로 다른 구체 제품입니다.
4. 다양한 제품 계열을 생성하는 방법
다양한 제품 계열을 생성하기 위해 팩토리 인터페이스를 사용합니다. 각 제품 계열에 대해 구체적인 팩토리 클래스를 만들면, 클라이언트는 추상 팩토리를 통해 제품을 사용할 수 있습니다.
예제 시나리오
- GUI 라이브러리
- 윈도우 (Windows) 스타일 UI
- 맥 (Mac) 스타일 UI
5. 실제 사용 사례
1. GUI 툴킷
운영체제에 따라 서로 다른 UI 요소를 생성할 때 추상 팩토리를 사용합니다.
- WindowsFactory → WindowsButton, WindowsMenu
- MacFactory → MacButton, MacMenu
2. 데이터베이스 연결
데이터베이스 종류에 따라 서로 다른 연결 객체를 생성할 수 있습니다.
- OracleFactory → OracleConnection
- MySQLFactory → MySQLConnection
6. 예제 코드
추상 팩토리 패턴 구현
// 1. Abstract Product
interface Button {
void render();
}
interface Menu {
void display();
}
// 2. Concrete Product A
class WindowsButton implements Button {
public void render() {
System.out.println("Rendering Windows Button");
}
}
class WindowsMenu implements Menu {
public void display() {
System.out.println("Displaying Windows Menu");
}
}
// 3. Concrete Product B
class MacButton implements Button {
public void render() {
System.out.println("Rendering Mac Button");
}
}
class MacMenu implements Menu {
public void display() {
System.out.println("Displaying Mac Menu");
}
}
// 4. Abstract Factory
interface GUIFactory {
Button createButton();
Menu createMenu();
}
// 5. Concrete Factory A
class WindowsFactory implements GUIFactory {
public Button createButton() {
return new WindowsButton();
}
public Menu createMenu() {
return new WindowsMenu();
}
}
// 6. Concrete Factory B
class MacFactory implements GUIFactory {
public Button createButton() {
return new MacButton();
}
public Menu createMenu() {
return new MacMenu();
}
}
// 7. Client Code
public class AbstractFactoryExample {
public static void main(String[] args) {
GUIFactory factory;
// Windows UI 생성
factory = new WindowsFactory();
Button button1 = factory.createButton();
Menu menu1 = factory.createMenu();
button1.render();
menu1.display();
// Mac UI 생성
factory = new MacFactory();
Button button2 = factory.createButton();
Menu menu2 = factory.createMenu();
button2.render();
menu2.display();
}
}
출력 결과
Rendering Windows Button
Displaying Windows Menu
Rendering Mac Button
Displaying Mac Menu
7. 결론
추상 팩토리 패턴은 관련된 객체들을 그룹으로 묶어 생성할 때 유용합니다. 팩토리 메서드보다 확장성이 뛰어나지만, 구조가 더 복잡해질 수 있습니다. 주로 플랫폼에 독립적인 UI 요소나 데이터베이스 연결 등에서 많이 사용됩니다.
반응형
'JAVA > JAVA Design Pattern' 카테고리의 다른 글
JAVA - 프로토타입(Prototype) 패턴 (0) | 2024.12.23 |
---|---|
빌더(Builder) 패턴 (0) | 2024.12.22 |
팩토리 메서드(Factory Method) 패턴 (0) | 2024.12.20 |
Singleton Pattern in Java (0) | 2024.12.19 |
JAVA 디자인 패턴 개요 (0) | 2024.12.18 |