minstudio

추상 팩토리 패턴 (Abstract Factory)

추상 팩토리 패턴(Abstract Factory Pattern)은 관련성 있는 여러 객체군(Family)을 생성하기 위한 인터페이스를 제공하는 생성 패턴입니다. 팩토리 메서드가 1개의 객체를 생성한다면, 추상 팩토리는 연관된 '여러 개'의 객체를 세트로 생성합니다.

예를 들어, Mac과 Windows 두 가지 운영체제를 지원하는 UI 라이브러리를 만들 때, 버튼과 체크박스를 섞어서 쓰면 안 됩니다(Windows 버튼 + Mac 체크박스 조합 불가). 추상 팩토리를 사용하면 WinUIFactory를 주입할 경우 알아서 Windows용 세트만 생성되도록 보장할 수 있습니다.

📦 Abstract Factory: 연관된 객체 군집(Family) 생성 << GUIFactory >> createButton(), createCheckbox() WinFactory WinButton 생성 WinCheckbox 생성 MacFactory MacButton 생성 MacCheckbox 생성
// Product A
interface Button { void render(); }
class MacButton implements Button { public void render() { System.out.println("Mac 버튼 렌더링"); } }
class WinButton implements Button { public void render() { System.out.println("Windows 버튼 렌더링"); } }

// Product B
interface Checkbox { void render(); }
class MacCheckbox implements Checkbox { public void render() { System.out.println("Mac 체크박스 렌더링"); } }
class WinCheckbox implements Checkbox { public void render() { System.out.println("Windows 체크박스 렌더링"); } }

// Abstract Factory
interface GUIFactory {
    Button createButton();
    Checkbox createCheckbox();
}

class MacFactory implements GUIFactory {
    public Button createButton() { return new MacButton(); }
    public Checkbox createCheckbox() { return new MacCheckbox(); }
}

class WinFactory implements GUIFactory {
    public Button createButton() { return new WinButton(); }
    public Checkbox createCheckbox() { return new WinCheckbox(); }
}

public class Main {
    public static void main(String[] args) {
        GUIFactory factory = new MacFactory(); // 환경에 따라 변경 가능
        Button btn = factory.createButton();
        Checkbox chk = factory.createCheckbox();
        btn.render();
        chk.render();
    }
}
추상 팩토리 패턴 (Abstract Factory) | Minstudio