⚡추상 팩토리 패턴이란?
추상 팩토리 패턴은 생성 패턴중 하나이다. 팩토리 패턴과 유사한 패턴으로 관련성이 있는 여러 객체의 집합을 생성하기 위한 인터페이스를 제공한다. 이 패턴은 클라이언트 코드에서 구체적인 객체를 직접 생성하는 의존성을 제거하고, 서로 관련된 객체들의 집합을 생성하는 인터페이스를 제공합니다.
추상 팩토리 패턴은 일종의 "팩토리의 팩토리" 라고 할 수 있다. 즉, 팩토리 객체를 생성하는 팩토리를 만들어서 이를 통해 서로 관련된 객체들을 생성한다. 이렇게 추상화된 인터페이스를 통해 클라이언트 코드는 구체적인 객체 생성 방법을 알 필요 없이 추상화된 팩토리 객체를 사용하여 객체를 생성할 수 있다.
이렇게 추상화된 인터페이스를 통해 클라이언트 코드는 객체 생성 방법이 변경되더라도, 코드 수정 없이 새로운 객체 생성 방법을 지원할 수 있다. 또한, 추상 팩토리 패턴은 팩토리 객체를 생성하는 팩토리를 쉽게 확장하여 새로운 객체 생성 방법을 추가할 수 있기 때문에 유지보수와 확장성이 우수한 코드를 작성할 수 있다.
⚡추상 팩토리 패턴은 어떤 경우에 사용하는가 ?
- 객체들의 생성이 서로 관련되어 있을 때: 추상 팩토리 패턴은 한 집합의 관련 객체를 생성하기 위한 인터페이스를 제공한다. 따라서, 객체들의 생성이 서로 관련되어 있을 때 사용하기 적합하다.
- 객체 생성 방법이 자주 변경될 때: 추상 팩토리 패턴을 사용하면, 클라이언트 코드가 객체 생성 방법을 명시적으로 지정하지 않기 때문에, 객체 생성 방법을 변경해도 클라이언트 코드에 영향을 미치지 않는다. 따라서, 객체 생성 방법이 자주 변경되는 경우에 추상 팩토리 패턴을 사용하기 적합하다.
- 객체 생성과 사용이 분리되어야 할 때: 추상 팩토리 패턴을 사용하면, 클라이언트 코드에서 객체를 생성하는 책임과 사용하는 책임을 분리할 수 있다. 따라서, 객체 생성과 사용이 분리되어야 하는 경우에 추상 팩토리 패턴을 사용하기 적합하다.
- 새로운 객체 종류를 추가해야 할 때: 추상 팩토리 패턴은 팩토리 객체를 생성하는 팩토리를 쉽게 확장할 수 있기 때문에, 새로운 객체 종류를 추가해야 할 때 추상 팩토리 패턴을 사용하기 적합하다.
즉, 추상 팩토리 패턴은 객체들의 생성이 서로 관련되어 있고, 객체 생성 방법이 자주 변경되는 경우, 객체 생성과 사용이 분리되어야 하는 경우, 그리고 새로운 객체 종류를 추가해야 할 때 사용하기 적합하다.
⚡추상 팩토리 패턴의 장단점
장점
- 객체 생성 코드를 클라이언트 코드에서 분리시킬 수 있다.
- 클라이언트 코드는 객체 생성에 대한 구체적인 정보를 알 필요가 없고, 추상 팩토리 인터페이스만을 사용하여 객체를 생성할 수 있다.
- 객체 생성 코드의 확장성이 높아진다.
- 추상 팩토리 패턴을 사용하면, 새로운 객체 종류를 추가하기 위해 새로운 팩토리 클래스와 관련 객체 클래스를 추가하기만 하면 됩니다. 따라서, 객체 생성 코드의 확장성이 높아진다.
- 객체 간의 결합도를 낮출 수 있다.
- 추상 팩토리 패턴을 사용하면, 서로 관련된 객체를 한 번에 생성할 수 있습니다. 이로 인해 객체 간의 결합도가 낮아지며, 유지보수성이 높아집니다.
- 구체 클래스에 대한 의존성을 감소시킨다.
- 추상 팩토리 패턴을 사용하면, 클라이언트 코드는 추상 팩토리 인터페이스와 추상 객체 클래스에만 의존하므로, 구체 클래스에 대한 의존성을 감소시킵니다.
단점
- 복잡한 구조를 가지고 있다.
- 객체 생성을 추상화하는 과정에서 복잡한 구조를 가지게 된다. 이로 인해 코드의 복잡도가 증가할 수 있다.
- 추가적인 클래스를 도입해야 한다.
- 팩토리 객체를 생성하는 팩토리 클래스를 추가로 도입해야 한다. 따라서 코드의 크기가 증가할 수 있다.
- 유연성이 떨어진다.
- 추상 팩토리 패턴은 객체 생성에 대한 인터페이스를 제공하기 때문에, 이 인터페이스를 변경하면 모든 관련 객체들을 수정해야 한다. 따라서, 유연성이 떨어질 수 있다.
- 디버깅이 어려울 수 있다.
- 추상 팩토리 패턴은 객체 생성과 관련된 여러 클래스들이 상호작용하기 때문에, 디버깅이 어려울 수 있다.
⚡추상 팩토리 패턴 소스 정리
⚡생각
추상 팩토리 패턴을 정리하면서 객체를 생성하는 코드와 실제 객체의 생성을 분리할 수 있어서 유지보수성이 높아진다는 것을 다시 한번 생각 하게 되었다. 또한 팩토리 패턴과의 차이점에 대해서 다시 한번 찾아보게 되었고 내가 개발하고 있고, 앞으로 개발할 소스에서 어떻게 적용을 해야할지 내부 소스 및 샘플소스를 다시 한번 검토해 보았다.
❗ 팩토리 패턴과 추상 팩토리 패턴의 차이점
팩토리 패턴과 추상 팩토리 패턴은 모두 객체 생성을 추상화하여 코드의 유연성을 높이고 유지보수와 확장성을 개선하는 데 사용되는 디자인 패턴 이라는 공통점이 있는 반면 팩토리 패턴은 하나의 객체를 생성하고 유연한 코드 작성을 위해 사용되는 반면, 추상 팩토리 패턴은 여러 개의 관련 객체를 생성하고 객체 생성에 대한 의존성을 제거하고자 하는 경우에 사용된다.
'디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 어댑터 패턴에 대한 내용 정리 (0) | 2023.03.24 |
---|---|
[디자인 패턴] 프로토 타입 패턴에 대한 내용 정리 (0) | 2023.03.21 |
[디자인 패턴] 빌더 패턴에 대한 내용 정리 (0) | 2023.03.20 |
[디자인 패턴] 팩토리 메소드 패턴에 대한 내용 정리 (0) | 2023.03.14 |
[디자인 패턴] 싱글턴 패턴에 대한 내용 정리 (0) | 2023.03.13 |