본문 바로가기
C++/기본

[C++] 33. 추상 팩토리 패턴

by 위니밍 2025. 3. 29.
반응형
📌 요약: Abstract Factory 패턴

🏭 추상 팩토리 패턴 (Abstract Factory Pattern)

추상 팩토리 패턴은 관련 있는 객체 집합을 하나의 군으로 묶어, 객체의 구체적인 생성 과정을 감추고 일관된 방식으로 객체를 생성할 수 있게 도와주는 생성 디자인 패턴입니다.

🏗️ 개요

제품군이 여러 종류로 구성되어 있고, 이 제품군을 브랜드(또는 유형)에 따라 통째로 생성해야 할 때 유용합니다.
예를 들어 스포츠카와 제트기, SUV와 헬리콥터를 각각 하나의 제품군으로 보고 브랜드별로 생성하는 구조를 구현할 수 있습니다.

📦 클래스 구성

- Car, Plane: 추상 제품 클래스
- SportCar, SUV: 차량의 구체 클래스
- JetPlane, Helicopter: 비행기의 구체 클래스
- TransportFactory: 추상 팩토리 클래스
- SportsFactory, SUVFactory: 구체 팩토리 클래스

// 추상 팩토리 클래스
class TransportFactory {
public:
    virtual Car* createCar() = 0;
    virtual Plane* createPlane() = 0;
    virtual ~TransportFactory() {}
};

// 스포츠 제품군 생성 팩토리
class SportsFactory : public TransportFactory {
public:
    Car* createCar() override { return new SportCar(); }
    Plane* createPlane() override { return new JetPlane(); }
};

// SUV 제품군 생성 팩토리
class SUVFactory : public TransportFactory {
public:
    Car* createCar() override { return new SUV(); }
    Plane* createPlane() override { return new Helicopter(); }
};
🧪 사용 예제
int main() {
    TransportFactory* sportsFactory = new SportsFactory();
    Car* car1 = sportsFactory->createCar();
    Plane* plane1 = sportsFactory->createPlane();

    car1->drive();
    plane1->fly();

    delete car1;
    delete plane1;
    delete sportsFactory;

    TransportFactory* suvFactory = new SUVFactory();
    Car* car2 = suvFactory->createCar();
    Plane* plane2 = suvFactory->createPlane();

    car2->drive();
    plane2->fly();

    delete car2;
    delete plane2;
    delete suvFactory;

    return 0;
}
▶️ 실행 순서

1. SportsFactorySUVFactory 객체를 생성합니다.
2. 각각의 팩토리에서 createCar(), createPlane()을 호출하여 제품군 생성
3. 생성된 차량과 비행기 객체에서 drive(), fly() 메서드 호출
4. 사용이 끝난 객체는 명시적으로 delete로 해제합니다.

반응형

'C++ > 기본' 카테고리의 다른 글

[C++] 메모리 영역  (1) 2025.06.08
[C++] 32. Factory Method  (0) 2025.03.29
[C++] 31. Builder  (0) 2025.03.29
[C++] 30. 행동패턴  (0) 2025.03.29
[C++] 29. 구조패턴  (0) 2025.03.29