정의
추상 팩토리 패턴은 관련된 객체나 의존성을 가진 객체 집합을 생성하는 인터페이스를 제공하는 디자인 패턴입니다. 구체적인 클래스를 지정하지 않고 동일한 제품군의 객체들을 생성할 수 있도록 설계됩니다. 이 패턴은 제품군 간 호환성과 일관성을 보장하며, 클라이언트 코드와 구현 세부사항 간의 결합도를 낮춥니다.주요 구성 요소
추상 팩토리 패턴은 다음 역할을 포함합니다:
- 추상 팩토리(Abstract Factory): 다양한 제품 유형을 생성하는 추상 메서드를 선언합니다.
- 구체적 팩토리(Concrete Factory): 특정 제품군의 모든 제품을 생성하는 실제 구현체입니다.
- 추상 제품(Abstract Product): 공통 인터페이스를 정의하여 제품의 행동을 규격화합니다.
- 구체적 제품(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();
}
}
장점 및 단점
장점:
- 제품군별 생성 로직을 통합하여 유지보수성 향상
- 클라이언트가 추상 인터페이스에 의존하여 확장성 강화
- 제품군 내 호환성 보장으로 불일치 방지
단점:
- 새로운 제품 유형 추가 시 기존 인터페이스 수정 필요
- 제품군이 많아질 경우 클래스 수 증가
- 단일 제품군에 적용 시 과도한 복잡도 발생
적용 사례
- 다양한 운영체제 UI 컴포넌트 생성 시
- 클라이언트가 구현 세부사항을 알 필요 없는 시스템
- 제품군 간 혼합 사용을 제어해야 할 경우