배경지식 쌓기 - 디자인 패턴 Factory Method Pattern

GoF Design Pattern

Posted by Yan on August 23, 2021

팩토리 메소드 패턴

서브 클래스에서 구체적인 오브젝트 생성 방법을 결정하게 하는 것.

  • 부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴
  • 자식 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴
  • 부모 클래스에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다
  • 객체를 생성하는 메소드 != 팩토리 메소드

상속을 통해 기능을 확장하게 하는 패턴 (템플릿 메소드와 비슷)

차이점 : 팩토리 메소드 패턴은 서브클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 한다

  • 슈퍼클래스 코드에서는 서브 클래스에서 구현할 메소드를 호출 -> 필요한 타입의 오브젝트를 가져와 사용(주로 인터페이스 타입으로 오브젝트를 리턴)
  • 서브 클래스에서 어떤 클래스의 오브젝트를 만들어 리턴할지는 슈퍼클래스에서 알지 못한다.
  • 서브클래스는 다양한 방법으로 오브젝트를 생성하는 메소드를 재정의 할 수 있다.
  • 서브클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메소드를 팩토리 메소드라고 한다. 이 방식을 통해 오브젝트 생성 방법을 나머지 로직, 즉 슈퍼클래스의 기본 코드에서 독립시키는 방법을 팩토리 메소드 패턴이라고 한다.

구조

  • 객체 생성을 캡슐화하는 패턴이다
  • Creator의 서브 클래스에 팩토리 메소드를 정의한다
  • 팩토리 메소드를 호출하여 적절한 ConcreteProduct 인스턴스를 반환하도록 한다.

구현방법

  1. Creator를 추상 클래스로 정의하고, 팩토리 메소드는 abstract로 선언하는 방법
  2. Creator가 구체 클래스고, 팩토리 메소드의 기본 구현을 제공하는 방법

reference

팩토리 메서드 패턴 > 팩토리 메소드 패턴 (Factory Method Pattern)