-
Abstract Factory Pattern(추상 팩토리 패턴)STUDY/디자인패턴 2024. 11. 12. 21:49
추상 팩토리 패턴이란?
관련 객체들의 구상 클래스들을 지정하지 않고도 관련 객체들의 모음을 생성할 수 있도록 하는 생성패턴
문제
1. 관련 제품들로 형성된 패밀리(제품군), 예 : Chair(의자) + Sofa(소파) + CoffeeTable(커피테이블).
2. 해당 제품군의 여러 가지 변형. 예를 들어 Chair(의자) + Sofa(소파) + CoffeeTable(커피테이블) 같은 제품들은 Modern(현대식), Victorian(빅토리안), ArtDeco(아르데코 양식) 와 같은 변형으로 제공
위와 같은 클래스들로 구성되는 가구 판매 프로그램을 만드는 경우
문제1. 새로운 개별 가구 객체를 생성했을 때, 이 객체들이 기존의 같은 패밀리 내에 있는 다른 가구 객체들과 일치하는 변경(스타일)을 가지도록 해야한다.
문제2. 가구 공급업체들은 카탈로그를 매우 자주 변경하기 때문에, 새로운 제품 또는 제품군(패밀리)을 추가할 때마다 기존 코드를 변경해야 하는 번거로움을 피해야 한다.
해결책
- 해결책1
각 제품 패일리(제품군)에 해당하는 개별적인 인터페이스를 명시적으로 선언한다. 그 다음, 제품의 모든 변형이 위 인터페이스를 따르도록 한다.
# 추상 제품 인터페이스 public interface Chair { void hasLegs(); void sitOn(); } public class VictorianChair implements Chair { @Override void hasLegs() {} @Override void sitOn() {} } public class ModernChair implements Chair { @Override void hasLegs() {} @Override void sitOn() {} } # 추상 제품 인터페이스 public interface Sofa { void hasLegs(); void sitOn(); } public class VictorianSofa implements Sofa { @Override void hasLegs() {} @Override void sitOn() {} } public class ModernSofa implements Sofa { @Override void hasLegs() {} @Override void sitOn() {} }
- 해결책2
추상 팩토리 메서드를 선언한다. 추상 공장 패턴은 제품 패밀리 내의 모든 개별 제품들의 생성 메소드들이 목록화되어있는 인터페이스이다. 추상 팩토리 인터페이스를 기반의로 별도의 팩토리 클래스를 생성한다. 팩토리는 특정 종류의 제품을 반환하는 클래스이다.
# 추상 팩토리 인터페이스 public interface FurnitureFactory { Chair createChair(); Sofa createSofa(); } public class VictorianFurnitureFactory implements FurnitureFactory { @Override Chair createChair() { return new VictorianChair(); } @Override Sofa createSofa() { return new VictorianSofa(); } } public class ModernFurnitureFactory implements FurnitureFactory { @Override Chair createChair() { return new ModernChair(); } @Override Sofa createSofa() { return new ModernSofa(); } }
클라이언트는 팩토리의 클래스들을 알 필요가 없으며, 팩토리가 어떤 변형의 의자를 생성할지 전혀 신경쓰지 않는다. 클라이언트는 추상 인터페이스를 사용하여, 종류에 상관없이 모든 제품을 항상 동일한 방식으로 주문할 수 있다.
구조
- 추상 제품 : 제품 패밀리를 구성하는 개별 연관 제품들의 집합에 대한 인터페이스들을 선언
- 구성 제품 : 추상 제품의 구현체로, 각 추상 제품은 주어진 모든 변형에 구현되어야 함
- 추상 팩토리 인터페이스 : 각각의 추상 제품들을 생성하기 위한 여러 메서드들의 집합을 선언
- 구상 팩토리 : 추상 팩토리의 생성 메서드들을 구현하고, 특정 변형들만 생성함
장단점
- 장점
- 팩토리에서 생성되는 제품들의 상호호환을 보장할 수 있다.
- 구상 제품들과 클라이언트 코드 사이의 단단한 결합을 피할 수 있다.
- 단일 책임 원칙 : 제품 생성 코드를 한 곳으로 추출하여 코드를 더 쉽게 유지보수할 수 있다.
- 개방/폐쇄 원칙 : 기존 클라이언트 코드를 훼손하지 않고 제품의 새로운 변형들을 생성할 수 있다.
- 단점
- 패턴과 함께 새로운 인터페이스들과 클래스들이 많이 도입되기 때문에 코드가 필요 이상으로 복잡해질 수 있다.
'STUDY > 디자인패턴' 카테고리의 다른 글
Singleton Pattern(싱글턴 패턴) (0) 2024.11.26 Prototype Pattern(프로토타입 패턴) (0) 2024.11.26 Builder Pattern(빌더 패턴) (0) 2024.11.12 Factory Method Pattern(팩토리 메서드 패턴) (0) 2024.10.29 Spring - 디자인 패턴 (0) 2021.05.10