본문 바로가기
Delvelopment/DesignPattern

[Design Pattern] 팩토리 메소드 패턴 (Factory Method Pattern)

by 제제킴 2022. 7. 3.
반응형

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

객체를 생성하기 위한 인터페이스를 정의하고, 어떤 클래스의 인스턴스를 생성할지에 대한 처리는 서브클래스가 결정하는 디자인 패턴 (GoF)

헤드퍼스트 디자인패턴

  • 다른 팩토리를 쓸 떄와 마찬가지로 팩토리 메소드 패턴으로 구상 형식 인스턴스를 만드는 작업을 캡슐화할 수 있다.
  • 팩토리 메소드 패턴에서는 어떤 클래스의 인스턴스를 만들지를 서브클래스에서 결정한다.
  • 사용하는 서브클래스에 따라 생산되는 객체 인스턴스가 결정된다.
  • 제품을 생산하는 부분과 사용하는 부분을 분리하여 느슨한 결합을 이룬다.

장점.

  • 객체 생성 코드를 전부 한 객체 또는 메소드(캡슐화)에 넣으면 코드에서 중복되는 내용을 제거할 수 있다.
  • 객체 인스턴스를 만들때 인터페이스만 있으면 된다.

의존성 뒤집기 원칙(Dependency Inversion Principle), 의존 역전 원칙

추상화된 것에 의존하게 만들고 구상 클래스에 의존하지 않게 만든다. 구현보다는 인터페이스에 맞춰서 프로그래밍 한다는 원칙.

의존성 뒤집기 원칙에 따르면, 구상 클래스처럼 구체적인 것이 아닌 추상 클래스나 인터페이스와 같이 추상적인 것에 의존하는 코드를 만들어야 한다. 이 원칙은 고수준 모듈과 저수준 모듈에 모두 적용이 가능하다. (PizzaSotre.class는 고수준 구성요소, Pizza.class는 저수준 구성요소)

의존성 뒤집기 원칙에 뒤집기 라는 말이 들어있는 이유는 객체 지향 디자인을 할 때 일반적으로 생각하는 방법과는 반대로 뒤집어서 생각해야 하기 때문이다. 저수준 구성요소가 고수준 추상 클래스에 의존하고 있으며, 저수준 구성 요소도 추상클래스에 연결된다.

의존성 뒤집기 원칙을 지키는 방법.

  • 변수에 구상 클래스의 래퍼런스를 저장하지 않는다.
  • 구상 클래스에서 유도된 클래스를 만들지 않는다.
  • 베이스 클래스에 이미 구현되어 있는 메소드를 오버라이드하지 않는다.

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

추상 팩토리 패턴 (Abstract Factory Pattern)은 구상 클래스에 의존하지 않고도 서로 연관되거나 의존전인 객체로 이루어진 제품군을 생산하는 인터페이스를 제공한다. 구상 클래스는 서브클래스에서 만든다.

추상 팩토리 패턴을 사용하면 클라이언트에서 추상 인터페이스로 일련의 제품을 공급받을 수 있다. 이때 실제로 어떤 제품이 생산되는지는 전혀 알 필요가 없다. 따라서, 클라이언트와 팩토리에서 생산되는 제품을 분리할 수 있다.

 

예제 소스는 양이 조금많아 github로 참고바랍니다.

https://github.com/jongjoo/design-pattern/tree/main/scr.main/pattern/factory

반응형

댓글