나만의공간

🧱 추상 팩토리 패턴(Abstract Factory Pattern) – 제품군을 세트로 만들고 싶을 때! 본문

IT/JAVA

🧱 추상 팩토리 패턴(Abstract Factory Pattern) – 제품군을 세트로 만들고 싶을 때!

밥알이 2025. 5. 30. 22:19

“TV는 삼성인데 냉장고는 LG라고요?”
제품을 세트로 깔끔하게 구성하고 싶을 때 사용하는 디자인 패턴이 있습니다. 바로 추상 팩토리 패턴입니다.


🧩 1. 추상 팩토리 패턴이란?

추상 팩토리 패턴은 관련된 객체들을 세트로 생성할 수 있게 해주는 디자인 패턴입니다.
즉, 여러 팩토리를 하나의 슈퍼 팩토리로 묶어, **제품군(product family)**을 일관성 있게 구성할 수 있게 합니다.

✅ 목적 요약

  • TV와 냉장고처럼 관련된 객체를 묶음으로 생성
  • 제품군이 다를 경우(삼성, LG 등) 각기 다른 객체 조합 제공
  • 클라이언트는 어떤 구체 클래스를 사용하는지 모르도록 추상화

📌 2. 언제 사용하나요?

사용 상황설명
🧩 관련된 객체들을 세트로 생성 TV–냉장고, 버튼–입력창 같은 UI 컴포넌트 등
🏗️ 브랜드, 환경, 플랫폼에 따라 객체 조합이 다를 때 삼성/LG, 다크모드/라이트모드 등
🎯 클라이언트가 어떤 클래스인지 알 필요 없도록 만들고 싶을 때 느슨한 결합(loose coupling) 지향
 

🎯 3. 예시 시나리오: 삼성 vs LG 전자제품

삼성과 LG에서 각각 TV와 냉장고를 만든다고 가정해보겠습니다.
요구사항: 같은 브랜드 제품끼리 세트로 생성하고 싶습니다.


 

🔧 4. 실무형 예제 코드

📁 1) 공통 인터페이스: TV, Refrigerator

public interface TV {
    void turnOn();
}

public interface Refrigerator {
    void cool();
}

📁 2) 삼성 제품군

public class SamsungTV implements TV {
    public void turnOn() {
        System.out.println("Samsung TV 켜짐");
    }
}

public class SamsungRefrigerator implements Refrigerator {
    public void cool() {
        System.out.println("Samsung 냉장고 냉각 시작");
    }
}

 


📁 3) LG 제품군

public class LgTV implements TV {
    public void turnOn() {
        System.out.println("LG TV 전원 ON");
    }
}

public class LgRefrigerator implements Refrigerator {
    public void cool() {
        System.out.println("LG 냉장고 냉장 시작");
    }
}

📁 4) 추상 팩토리 인터페이스

public interface ElectronicsFactory {
    TV createTV();
    Refrigerator createRefrigerator();
}

📁 5) 구체 팩토리: 삼성 & LG

public class SamsungFactory implements ElectronicsFactory {
    public TV createTV() {
        return new SamsungTV();
    }

    public Refrigerator createRefrigerator() {
        return new SamsungRefrigerator();
    }
}

public class LgFactory implements ElectronicsFactory {
    public TV createTV() {
        return new LgTV();
    }

    public Refrigerator createRefrigerator() {
        return new LgRefrigerator();
    }
}

📁 6) 클라이언트 코드

public class ElectronicsStore {
    public static void main(String[] args) {
        // 브랜드에 따라 공장을 선택
        ElectronicsFactory factory = new SamsungFactory(); // 또는 new LgFactory()

        TV tv = factory.createTV();
        Refrigerator fridge = factory.createRefrigerator();

        tv.turnOn();
        fridge.cool();
    }
}

✅ 실행 결과

Samsung TV 켜짐  
Samsung 냉장고 냉각 시작

🧠 팩토리 패턴과의 차이점은?

구분팩토리 패턴추상 팩토리 패턴
목적 단일 객체 생성 관련된 객체군 생성
구조 하나의 팩토리 클래스 여러 팩토리를 추상화한 슈퍼 팩토리
예시 배송 타입별 객체 TV + 냉장고 같은 세트 구성
 

💼 실무 활용 팁

추상 팩토리 패턴은 다음과 같은 상황에서 널리 사용됩니다:

  • UI 라이브러리: 다크모드/라이트모드 버튼, 입력창 등 일관된 테마 적용
  • DB 드라이버: Oracle용/ MySQL용 DAO 클래스
  • 메시징 모듈: Kafka용 Producer, RabbitMQ용 Consumer
  • 게임 개발: 테마 별 몬스터 + 무기 + 배경 세트 생성

✨ 마무리

추상 팩토리 패턴은 제품군을 일관성 있게 구성하고, 코드 확장성과 재사용성을 높이는 데 매우 유용합니다.
느슨한 결합 구조를 유지하면서 브랜드/환경에 따른 객체 세트를 만들어야 한다면, 이 패턴을 꼭 고려해보세요!

Comments