Python Design Pattern — Factory method

Cliffe
3 min readSep 3, 2019

팩토리 메소드 패턴 ( Factory method Pattern)

팩토리 메소드 패턴(Factory method pattern)의 개념

  1. 인스턴스화가 아닌 상속을 통해 객체를 생성한다.
  2. 유동적인 디자인으로 특정 객체가 아닌 인스턴스나 서브 클래스 객체를 반환할 수 있다.
  3. 인터페이스를 통해 객체를 생성하지만 팩토리가 아닌 서브 클래스가 해당 객체 생성을 위해 어떤 클래스를 호출할지 결정한다.

팩토리 메소드 패턴 예제 코드

로봇을 조립하는 코드를 만든다고 생각하자. 로봇 조립에 필요한 각 부품들에 대한 클래스를 선언한다.

로봇 부품 별 클래스 선언

그리고 각 로봇들에 대해 클래스를 선언합니다. add_part로 로봇 별로 필요한 부품을 추가합니다.

로봇 종류 별 클래스 선언

선언한 로봇 클래스의 “assemble_parts”를 이용해 로봇을 조립합니다.

로봇 조립

팩토리 메소드 패턴의 장점

  1. 유연성과 포괄성을 갖추며 한 클래스에 종속되지 않는다.
  2. 객체를 생성하는 코드와 활요하는 코드를 분리하여 의존성이 줄어든다.
  3. 새로운 클래스 추가 등의 유지보수가 쉽다.

추상 팩토리 패턴 ( Abstract factory Pattern)

추상 팩토리 패턴 ( Abstract factory Pattern)의 개념

  1. 클래스를 직접 호출하지 않고 관련 객체를 생성하는 인터페이스를 제공한다.
  2. 팩토리 메소드는 인스턴스 생성을 서브 클래스에 맡기는 반면 추상 팩토리는 관련된 객체의 집합을 생성한다.
  3. 클라이언트는 객체 생성 로직과 상관없이 생성된 객체를 사용하며, 오직 인터페이스를 통해 객체에 접근할 수 있다.

추상 팩토리 패턴 예제 코드

이번엔 각 로봇을 만드는 가계가 있다고 생각하자. 각각의 가계에선 개 로봇과 새 로봇을 만든다.

개 로봇은 짖기 기능, 새 로봇은 날기 기능이 있다.

각각의 가계의 로봇들의 기능을 실행시키면 아래의 처럼 출력된다.

이를 이용해 원하는 가계를 선택하여 선택한 가계의 로봇을 가져와 기능을 사용할 수 있다.

이처럼 추상 팩토리 패턴을 이용하여 관련된 객체의 집합을 가져올 수 있고, 가계(인터페이스)를 통해 기계(객체)에 접근할 수 있다.

추상 팩토리 패턴의 장점

  1. 추상 팩토리 패턴은 확장에 매우 용의한 패턴이다.
  2. 추상 팩토리 패턴은 기존 팩토리 패턴의 if-else 로직에서 벗어날 수 있게 해준다.
  3. 구체적인 클래스는 분리 되어있다.

팩토리 메소드 패턴과 추상 팩토리 패턴은 공통점도 있지만 차이가 극명하기 때문에 필요한 상황에 맞게 사용하는 것이 중요하다.

--

--