Java/디자인 패턴

생성 패턴 _ 추상 팩토리 패턴

minquu 2025. 7. 21. 13:22
반응형

🏭 추상 팩토리 패턴(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