티스토리 뷰

1. 추상 팩토리 패턴이란 무엇인가?

구체적으로 어떤 클래스의 인스턴스를 사용하는 감춘 상태로 서로 연관된 여러 객체를 생성하는 인터페이스를 제공한다.

 

구성요소

 

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)에 초점

- 팩토리 메서드 패턴은 구체적인 객체 생성 과정을 서브클래스로 옮기는 것이 목적.

- 추상 팩토리 패턴은 관련있는 여러 객체를 구체적인 클래스에 의존하지 않고 만들 수 있게 해주는 것이 목적