반응형
팩토리 패턴이란?
클래스의 인스턴스를 만드는 것을 서브클래스에서 결정하도록 한다는 것이다.
즉, new 키워드를 사용하는 부분을 서브클래스에 위임함으로서 객체 생성을 캡슐화하고 구상 클래스에 대한 의존성이 줄어든다는 이점을 얻을 수 있다.
팩토리 패턴에는 2가지 종류가 있다.
- 팩토리 메서드 패턴
- 추상 팩토리 패턴
팩토리 메서드 패턴
- 객체를 생성하는 인터페이스는 미리 정의하되, 객체 생성은 서브클래스(팩토리)로 위임하는 패턴
- 객체를 생성해서 반환하는 것을 말한다. 즉, 결과값이 객체인 것이다
- 팩토리는 인터페이스로 추상화되어 구체 팩토리의 변경을 유연하게 한다.
- 클라이언트는 결과적으로 어떤 객체가 생성될 것인지 알 필요가 없는 것이 특징이다.
추상 팩토리 패턴
- 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
- 추상화된 팩토리를 이용하여 특정 그룹의 요소 객체들을 생성 할 수 있는 메서드를 정의
- 추상화 팩토리를 구현한 구체 클래스는, 구체 클래스의 특성에 따라 구체화된 요소 객체들을 반환하도록 구현
- 팩토리와 요소 객체들을 추상화하여 클라이언트와의 결합을 느슨하게 한다.
팩토리 메서드 패턴과 추상 팩토리 패턴의 공통점
- Template Method Pattern을 사용
- Factory 클래스를 사용해서 생성
- Factory Method Pattern을 사용
- 둘 다 추상화 클래스와 Factory를 통해 실제 구현 대상인 Concrete(구상 클래스, 구체 클래스)와 client 간 결합도를 낮찬다.
- 추상 팩토리 팩턴은 Factory Method Pattern을 사용한다. 그리고 팩토리 메서드 패턴의 단점을 보완한다.
- 객체 생성을 캡슐화
- 구상 클래스가 아닌, 추상 클래스와 인터페이스에 맞춰 코딩이 가능하다.
팩토리 메소드 패턴과 추상 팩토리 패턴의 차이점
1.Factory 클래스에서 객체에 대한 생성을 지원하는 범위
- 팩토리 메소드 패턴
- 한 팩토리당 한 종류 (create 메서드가 Factory 클래스에 1개)
- 한 개의 메서드로 여러 개의 객체를 만듦
- 추상 팩토리 패턴
- 한 팩토리에서 서로 연관된 여러 종류 모두 지원 (create() 메서드가 팩토리 클래스에 여러 개)
- 구현 클래스에 의존하지 않고 여러 개의 관련된 객체를 하나의 팩토리로 묶음
2. 팩토리 메서드에서 만드는 객체의 종류
- 팩토리 메소드 패턴의 팩토리 메서드
- 인자에 따라 객체의 종류가 결정 된다
- 추상 팩토리 패턴 패턴의 팩토리 메서드
- 인자에 따라 관련된 객체들을 생성하는 팩토리의 종류가 결정됨
3. 결합도를 낮추는 대상
- 팩토리 메서드 패턴
- ConcreteProduct와 Client 간의 결합도를 낮출 때 사용
- 추상 팩토리 패턴
- ConcreteFactory와 Client간의 결합도를 낮출 때 사용
4. 포커스
- 팩토리 메서드 패턴
- 메서드(Factory Method) 레벨에서 포커스를 맞춤
- 클라이언트의 ConcreteProduct 인스턴스 생성 및 구성에 대한 책임을 덜어줌
- 추상 팩토리 패턴
- 클래스(Abstract Factory) 레벨에서 포커스를 맞춤
- 각 Product들이 다른 클래스와 함께 사용될 때의 제약사항을 강제할 수 있다.
- 단, 새로운 ConcreteFactory를 추가할 때 많은 작업이 필요하다.
5. 메서드와 오브젝트
- 팩토리 메서드는 단일 Method이다
- 추상 팩토리는 Object이다. (팩토리 오브젝트 생성)
6. Inhritance(상속), Composition(구성)
- 팩토리 메서드 패턴
- 상속을 사용하여 객체의 인스턴스 생성에 대해서는 서브클래스에 의존
- 지역 레퍼런스 없이 바로 하위 클래스의 함수를 호출하여 객체를 만듦
- 추상 팩토리 패턴
- 지역 레퍼런스를 두어 , 외부로부터 Factory 객체를 DI 받아서 위임.
Sciprt
팩토리 메서드 패턴은 각각 다른 객체들이 필요할 때 사용하며, 추상 팩토리 패턴은 서로 연관 있는 객체들의 조합이 필요할 때 사용한다.
참고 자료
https://beomseok95.tistory.com/246
https://fvor001.tistory.com/63
'디자인패턴' 카테고리의 다른 글
컴포짓(composite) 패턴 (0) | 2022.07.30 |
---|---|
브릿지(Bridge)패턴 (0) | 2022.07.20 |
프로토타입(Prototype) 패턴 (0) | 2022.07.08 |
팩토리 메소드 패턴(Factory Method Pattern) (0) | 2022.06.11 |
싱글톤 패턴(singleton pattern) (0) | 2022.06.04 |