추상 팩토리 패턴

정의

추상 팩토리 패턴은 관련된 객체나 의존성을 가진 객체 집합을 생성하는 인터페이스를 제공하는 디자인 패턴입니다. 구체적인 클래스를 지정하지 않고 동일한 제품군의 객체들을 생성할 수 있도록 설계됩니다. 이 패턴은 제품군 간 호환성과 일관성을 보장하며, 클라이언트 코드와 구현 세부사항 간의 결합도를 낮춥니다.

주요 구성 요소

추상 팩토리 패턴은 다음 역할을 포함합니다:

  1. 추상 팩토리(Abstract Factory): 다양한 제품 유형을 생성하는 추상 메서드를 선언합니다.
  2. 구체적 팩토리(Concrete Factory): 특정 제품군의 모든 제품을 생성하는 실제 구현체입니다.
  3. 추상 제품(Abstract Product): 공통 인터페이스를 정의하여 제품의 행동을 규격화합니다.
  4. 구체적 제품(Concrete Product): 추상 제품 인터페이스를 구현하여 실제 제품을 표현합니다.

코드 예시


// 추상 제품 인터페이스
public interface CarType1 {
    void assemble();
}

public interface CarType2 {
    void assemble();
}

// 구체적 제품
public class CompanyASUV implements CarType1 {
    @Override
    public void assemble() {
        System.out.println("회사A가 제조한 SUV");
    }
}

public class CompanyABUS implements CarType2 {
    @Override
    public void assemble() {
        System.out.println("회사A가 제조한 버스");
    }
}

// 추상 팩토리 인터페이스
public interface ProductionFactory {
    CarType1 createSUV();
    CarType2 createBUS();
}

// 구체적 팩토리
public class CompanyAFactory implements ProductionFactory {
    @Override
    public CarType1 createSUV() {
        return new CompanyASUV();
    }

    @Override
    public CarType2 createBUS() {
        return new CompanyABUS();
    }
}

// 클라이언트 사용 예
public class Client {
    public static void main(String[] args) {
        ProductionFactory factory = new CompanyAFactory();
        factory.createSUV().assemble();
        factory.createBUS().assemble();
    }
}

장점 및 단점

장점:

  • 제품군별 생성 로직을 통합하여 유지보수성 향상
  • 클라이언트가 추상 인터페이스에 의존하여 확장성 강화
  • 제품군 내 호환성 보장으로 불일치 방지

단점:

  • 새로운 제품 유형 추가 시 기존 인터페이스 수정 필요
  • 제품군이 많아질 경우 클래스 수 증가
  • 단일 제품군에 적용 시 과도한 복잡도 발생

적용 사례

  1. 다양한 운영체제 UI 컴포넌트 생성 시
  2. 클라이언트가 구현 세부사항을 알 필요 없는 시스템
  3. 제품군 간 혼합 사용을 제어해야 할 경우

태그: DesignPattern java FactoryPattern OOP SoftwareArchitecture

5월 28일 07:52에 게시됨