생성패턴 | 2. Abstract Factory

May Han·2022년 1월 27일
2

Design Patterns

목록 보기
3/3

Abstract Factory ?

  • 구상 클래스를 지정하지 않고도 인터페이스를 이용하여 서로 연관되거나 의존하는 객체를 생성 할 수 있다.
  • 즉, 연관된 서브 클래스를 그룹화할 수 있고 이것은 이 그룹을 자유롭게 교체할 수 있는 패턴이라고 할 수 있다.
  • 추상 팩토리 패턴에는 팩토리 메소드 패턴이 포함될 수 있다.
  • 특히 구상 클래스에 대한 의존성이 줄어드는 것은 의존성 뒤집기 원칙(Dependency Inversion Principle:DI)에 기인하는데, DI는 자바 진영에서 널리 쓰이고 있는 Spring 프레임워크의 핵심 개념 중 하나이다.

Abstract Factory is a creational design pattern that lets you produce families of related objects without specifying their concrete classes.


Problem Example

가구점 시뮬레이터(furniture shop simulator)를 만드는데 다음과 같은 클래스로 구성되어 있다.
1. 관련 제품군: Chair + Sofa + CoffeeTable.
2. 카테고리 : Modern + Victorian + ArtDeco.

동일한 카테고리의 furniture object를 생성하여 매치시킬 수 있는 방법이 필요하다. (만약 고객이 가구를 추가 주문했는데 다른 카테고리의 제품이 배송되면 만족스럽지 못할 것이다.)

뿐만아니라, 새로운 제품이나 카테고리가 추가될 때 마다 기존의 코드를 수정하는 것을 원하진 않을 것이다.



Solution

Step #1

각 제품군(Chair, Sofa, CoffeeTable)에 대한 인터페이스를 명시적으로 선언하고 모든 제품(all variants of products)은 인터페이스를 상속 받는다.

Step #2

제품별 생성 함수(createChair, createSofa and createCoffeeTable)가 선언되어 있는 Abstract Factory 인터페이스를 선언한다.


그렇다면 카테고리 구분은 어떻게 해야할까?

카테고리별로 AbstractFactory를 상속받고 있는 Factory클래스를 만들어준다.
(참고로 ModernFurnitureFactoryModernChair, ModernSofa and ModernCoffeeTable 객체만 만들 수 있다.)


Reference

https://woovictory.github.io/2019/02/07/Design-Pattern-Factory-Pattern/
https://refactoring.guru/design-patterns/abstract-factory

profile
🚢 크루즈승무원 출신 백엔드 개발자, 기록하는 것을 좋아합니다.

0개의 댓글