티스토리 뷰
4-2. 추상 팩토리 패턴 (Abstract Factory Pattern)
Jason of the Argos 2023. 9. 1. 20:441. 추상 팩토리 패턴이란 무엇인가?
구체적으로 어떤 클래스의 인스턴스를 사용하는 감춘 상태로 서로 연관된 여러 객체를 생성하는 인터페이스를 제공한다.
구성요소

1) AbstractFactory
- AbstractProduct 객체를 생성하는 인터페이스를 선언한다.
2) ConcreteFactory
- AbstractProduct를 구현하는 구상 객체를 생성하기 위한 행위를 구현한다.
3) AbstractProduct
- 한 종류의 Product 객체의 인터페이스를 선언한다.
4) ConcreteProduct
- 담당한 ConcreteProduct에 의해 생성되는 객체를 정의함.
- AbstractProduct 인터페이스를 구현함.
5) Client
- AbstractFactory / AbstractProduct가 선언한 인터페이스 만 사용함.
2. 동기
기본이 되는 디자인 패턴:
의존성 뒤집기 원칙 (Dependency Inversion Principle): 추상화된 것에 의존하도록 만들어라.
구상 클래스에 의존하도록 만들지 않도록 한다.
- 클라이언트 코드 (인스턴스를 만들어서 쓰는) 코드를 인터페이스 기반으로 하도록 한다.
장점:
1) 구상 클래스를 격리 시킨다.
- 애플리케이션이 생성한 객체를 제어할 수 있게 해준다.
- 팩토리가 객체 생성을 대신하기 때문에, 클라이언트가 객체 생성에 관여하지 않게 해준다.
- 클라이언트는 오직 제공된 추상 인터페이스를 통해 생성된 객체들에 대해 작업을 할 수 잇다
2) Product 군을 변경하는 것이 쉽다.
3) Product 간의 일관성을 제공한다.
- 같은 Product 군끼리 함께 작동하도록 디자인 되어 있다면, 애플리케이션을 사용할 때 한 번에 한 군(family) 씩 사용하는 것이 적절한데, 추상 팩토리 메서드는 이것을 지킬 수 있도록 도와준다.
단점:
1) 새로운 종류의 Product를 만드는 것이 어려워진다.
- AbstractFactory 인터페이스가 생성될 수 있는 Product 군을 고정시키기 때문이다.
- 새로운 종류를 추가하려면 또 AbstractFactory와 그 서브클래스를 모두 바꿔야하는 문제가 생긴다.
3. 개인적인 포인트
1) 팩토리 메서드 VS 추상 팩토리 패턴
- 관점이 다르다
- 팩토리 메서드 패턴: 팩토리를 구현하는 방법 (inheritance)에 초점
- 추상 팩토리 패턴: 팩토리를 사용하는 방법 (composition)에 초점
- 팩토리 메서드 패턴은 구체적인 객체 생성 과정을 서브클래스로 옮기는 것이 목적.
- 추상 팩토리 패턴은 관련있는 여러 객체를 구체적인 클래스에 의존하지 않고 만들 수 있게 해주는 것이 목적
'Computer Science > 디자인 패턴' 카테고리의 다른 글
6. 커맨드 패턴 (Command Pattern) (0) | 2023.10.08 |
---|---|
5. 싱글턴 패턴 (Singleton Pattern) (0) | 2023.09.10 |
4-1. 팩토리 메서드 패턴 (Factory Method Pattern) (0) | 2023.09.01 |
3. 데코레이터 패턴 (Decorator Pattern) (1) | 2023.08.29 |
2. 옵저버 패턴 (Observer Pattern) (0) | 2023.08.19 |
- Total
- Today
- Yesterday
- 코테
- 카카오
- behavior parameterization
- decorator
- 디자인패턴
- 카카오 인턴
- 프로그래밍 모델
- Spring
- 카카오 코테
- spring cloud sleuth
- jvm
- WORA
- Java #GC #가비지콜렉터 #Garbage Collector
- 2019 Kakao Blind
- KAKAO 2021
- 모던 자바 인 액션
- 2021
- WORE
- zipkin
- Java #JIT #JVM
- Kakao Blind
- 신규 아이디 추천
- PatternSyntaxException
- okhttp3
- IOC
- 카카오코테
- 2020 KAKAO
- nginx 내부
- 스프링
- Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |