Link
Today
Total
10-17 12:16
Archives
관리 메뉴

초보개발자 긍.응.성

7. Factory Method Pattern, Abstract Factory Pattern(팩토리 메서트 패턴, 추상 팩토리 패턴) 본문

카테고리 없음

7. Factory Method Pattern, Abstract Factory Pattern(팩토리 메서트 패턴, 추상 팩토리 패턴)

긍.응.성 2019. 12. 20. 21:55
반응형

Creational Pattern인 Factory Pattern 중 Factory Method Pattern, Abstract Method Pattern에 대해 알아보자

 

 

 

Creation Pattern

Object가 어떻게 생성, 합성, 표현되는지를 분리하는 객체 생성 패턴이다. 객체의 생성과 조합을 캡슐화해 특정 객체가 추가 혹은 변경되어도 프로그램 구조에 영향을 크게 받지 않도록 유연성을 제공한다.

New 키워드를 사용하지 않고 코드를 작성할 수 있게 해준다. 즉, 코드 제공자의 입장에서 새로운 Object의 추가에 의해 Client Code에 새로운 객체에 대해 new키워드를 사용하지 않아도 되기 때문에 수정이 필요하지 않다는 장점이 있다.

 

 

 

Factory Method Pattern

1. Purpose

new 가 아닌 객체를 생성하는 메서드를 생성하고 제공한다. subclass에서 실질적인 생성과정을 진행하게 한다.

 

2. Use When

  • 어떠한 클래스를 생성해야 할지 모를때
  • 하위 클래스에서 어떠한 객체가 만들어져야 할지 알고 있을 때
  • 상위 클래스가 하위 클래스에게 creation을 위임하고 싶을 때

 

Object를 생성하는 인터페이스를 제공하고, 하위 클래스가 어떤 클래스를 생성할지 결정한다.

이는 DIP를 만족한다. Abstract 한 Creator가 Concrete 한 ConcreteCreator에게 의존하지 않고 있다. 이를 통해 ConcreteClass의 변화에도 Client의 코드는 영향을 받지 않는다.

사용자는 Creator를 이용해 Product를 생성한다. 이때 실제 Product의 생성은 Creator의 하위 클래스인 ConcreteCreator가 맡게 되며 ConcreteProduct를 생성하여 Client에게 전달한다.

 

 

 

 

Abstract Factory Pattern

1. Purpose

하나 이상의 특정한 객체(Group of Class)를 생성할 수 있는 인터페이스를 제공하기 위해

 

2. Use When

  • 묶음의 객체를 생성하고 함께 사용되어야 할 때
  • 묶음의 객체가 구현 방법에 대해 노출 없이 제공되어야 할 때
  • Concrete Class (Concrete Product)가 사용자와 decouple 되어야 할 때

 

기본적으로 Abstract Factory Pattern은 Factory Method Pattern보다 한 단계 더 높은 추상화 방법이다. 서로 연관되거나 의존적인 객체의 조합(multiple families of object)을 만들기 위해 사용된다.

(ex. 테마를 선택하면 그 테마에 맞는 아이콘, 버튼 등이 제공되어야 할 때)

 

Client는 abstract수준의 클래스(AbstractFactory와 AbstractProduct)만 알고 있다. 이 인터페이스 만을 이용하여 Programming을 진행할 것이며 Concrete 한 Factory나 Product의 변화에 영향을 받지 않는다.

 

장점

새로운 Factory를 만들기 쉬우며 그렇기 때문에 새로운 product family를 만드는 것도 쉽다.

생성 부분에 대한 encapsulation이 잘 이루어진다.

 

단점

새로운 Product의 추가는 모든 subclass들에게 영향을 끼친다. 새로운 Product가 나오면 해당 product를 위한 생성문이 모든 factory에 만들어져야 한다.

 

 

 

정리

Factory Method Pattern과 Abstract Factory Pattern은 서로 연관이 있다. 주로 첫 디자인은 Factory Method 패턴으로 시작하며 복잡해짐에 따라 유연성을 위해 Abstract Factor과 같은 Creation Pattern들을 적용시킨다. Concrete 객체들에 의존적이지 않게 Abstract class를 만들어 의존성을 낮추었기 때문에 DIP를 잘 활용하는 패턴이다.

반응형
Comments