본문 바로가기
Design Pattern

[Design Pattern] 팩토리 메소드 패턴(Factory Method Pattern)에 대해 알아보자

by 개발자J의일상 2022. 6. 23.
반응형

Definition

팩토리 메소드 패턴(Factory Method Pattern)에서는 객체를 생성할 때 필요한 인터페이스를 만든다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정한다. 팩토리 메소드 패턴을 사용하면 클래스 인스턴스를 만드는 일을 서브클래스에게 맡기게 된다.

- Creational Patterns

 

사용하는 서브클래스에 따라 생산되는 객체 인스턴스가 결정된다.

 

Situation

- 피자 종류가 계속해서 추가되어 새로운 피자에 대한 if 문이 증가하고 new를 피자 클래스안에서 계속해서 처리 -> 객체 생성 코드를 Factory 클래스를 생성하여 이동시킴

- 클래스는 생성해야 하는 클래스를 알지 못함

- 서브클래스는 생성되어야 하는 객체를 지정할 수 있음

- 부모 클래스는 생성을 하위 클래스로 맡기길 원함

- 코드에서 작업해야 하는 객체의 정확한 유형과 종속성을 모르는 경우

◇ Factory Method는 제품 구성 코드와 실제로 제품을 사용하는 코드를 구분하여, 코드의 나머지 부분과 독립적으로 제품

구성 코드를 확장하는 것이 더 쉽다.

◇ 예를 들어 앱에 새 제품 유형을 추가하려면 새 생성자 하위 클래스를 만들고 그 안에 있는 팩토리 메서드를 재정의하기만 하면 된다.

- 라이브러리나 프레임워크의 사용자에게 내부 구성 요소를 확장하는 방법을 제공하려는 경우

- 매번 재구축하는 대신 기존 객체를 재사용하여 시스템 리소스를 절약하려는 경우

 

Structure

https://refactoring.guru/design-patterns/factory-method

Pros

- Creator와 concrete product간의 긴밀한 결합을 피할 수 있다.

- 단일 책임 원칙. 제품 생성 코드를 프로그램의 한 위치로 이동하여 코드를 더 쉽게 지원할 수 있다.

- 개방/폐쇄 원칙. 기존 클라이언트 코드를 손상시키지 않고 새로운 유형의 제품을 프로그램에 도입할 수 있다.

Cons

- 패턴을 구현하기 위해 많은 새 하위 클래스를 도입해야 하므로 코드가 더 복잡해질 수 있다. 가장 좋은 시나리오는 생성자 클래스의 기존 계층 구조에 패턴을 도입할 때 이다.

비슷한 패턴

많은 디자인은 Factory Method(덜 복잡하고 하위 클래스를 통해 사용자 정의 가능)를 사용하여 시작하여 Abstract Factory, Prototype 또는 Builder(더 유연하지만 더 복잡함)로 발전한다.

 

Factory Method vs Abstract Factory

- Factory Method는 인스턴스화할 객체를 결정하기 위해 상속을 사용하는데 중점을 둔다.

- Abstract Factory는 인스턴스화를 다른 객체에 위임하는데 중점을 둔다.

- Abstract Factory 클래스는 종종 Factory Method 세트를 기반으로 하지만 Prototype을 사용하여 이러한 클래스의 메소드를 구성할 수도 있다.

 

Factory Method vs Prototype

- Prototype은 상속을 기반으로 하지 않으므로 단점이 없다. 반면에 Prototype은 복제된 객체의 복잡한 초기화가 필요하다.

- Factory Method는 상속을 기반으로 하지만 초기화 단계가 필요하지 않다.

 

Factory Method vs Template Method

- Factory MethodTemplate Method의 특수화이다.

- 동시에 Factory Method는 큰 Template Method의 한단계 역할을 할 수 있다.

 

Dependency Inversion Principle

- 추상화에 의존한다. concreate 클래스에 의존하지 마라.

- 높은 수준의 구성 요소는 낮은 수준의 구성 요소에 의존해서는 안된다. 오히려 둘 다 추상화에 의존해야 한다.

- Factory MethodDIP를 따르는 한 가지 방법이다.

 

With Iterator

Iterator와 함께 Factory Method를 사용하여 컬렉션 하위 클래스가 컬렉션과 호환되는 다양한 유형의 Iterator를 반환하도록 할 수 있다.

300x250

댓글