본문 바로가기
OLD_달려라/소프트웨어공학

Design Pattern] Factory Method

by 달승 2020. 6. 27.
 

Factory Method

/ Design Patterns / Creational Patterns Factory Method Also known as: Virtual Constructor Intent Factory Method is a creational design pattern that provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objec

refactoring.guru

 

♬ Factory Method란?

Factory Method는 수퍼 클래스에서 오브젝트를 작성하기 위해 인터페이스를 제공합니다.

이 때 어떤 클래스의 인스턴스를 만들지는 '서브클래스에서 결정'합니다.

 

디자인 원칙 중

Dependency Inversion Principle에 기인한 패턴입니다.

 

DIP(의 역전 원칙) : 추상화된 것에 의존하도록 만들고, 구상 클래스에 의존하지 않도록 만든다.

 

즉, 팩토리 메소드 패턴에서

메소드는 객체를 생성하고 반환합니다.

 

 

 

♬ Problem

여러분은 물류 관리 응용 프로그램을 만들고 있습니다.

이 때 첫 번째 Truck(Road Logistics)은 운송만을 처리할 수 있으므로 대부분의 코드는 Truck 클래스 내부에 구현됩니다.

 

그 후에 공장 물류 운송이 활발해져

Ships(Sea Logistics)가 추가됩니다. 뿐만 아니라 여러 운송방법도 추가될 수 있겠죠?

 

기존 코드에 새로운 코드를 추가해야 하는 상황

Truck Class가 구현된 코드에 Ships Class도 추가해야 하는 상황이 발생합니다.

이 때 여러분들은 코드를 어떻게 구현하실건가요?

 

이렇게 코드를 짜다보면 스파게티 코드가 될 가능성이 높아집니다.

 

이를 해결하기 위해 어떻게 효율적인 코드를 구현해야 할까요?

 

 

 

♬ Solution

Factory Method Pattern은 'new' 오퍼레이터를 사용해 '오브젝트 구성을 위한 직접적인 호출' --> '팩토리 메소드 호출'로 대체하는 해결책을 줍니다.

 

즉 객체는 처음과 마찬가지로 new로 생성되지만,

팩토리 메소드 내에서 호출되는 것이죠!

 

위에서 제기된 문제를 해결하면 이와 같이 다이어그램을 그릴 수 있습니다.

 

 

 

 

좀 더 쉽고, 전체적인 다이어그램을 살펴보겠습니다.

 

 

 

 

Product

: 인터페이스 선언 class, 모든 오브젝트에 공통적으로 적용되는 인터페이스.

 

Concrete Products

: Product interface의 다른 구현 (예. ship class / truck class)

 

Creator class

: new product 객체를 반환. return 유형은 product interface와 일치해야 함.

 

  +) 팩토리 메소드를 abstract로 선언한 후, 모든 서브 클래스가 고유한 메소드를 구현하도록 할 수 있음.

 

Concrete Creators

: 기본 팩토리 메소드 재정의. 다른 타입의 product를 return해야 함.

 

 

 

예시 CODE

 

Design Patterns: Factory Method in Java

/ Design Patterns / Factory Method / Java Factory Method in Java Factory method is a creational design pattern which solves the problem of creating product objects without specifying their concrete classes. Factory Method defines a method, which should be

refactoring.guru

 

 

 

'OLD_달려라 > 소프트웨어공학' 카테고리의 다른 글

Design Pattern ] Singleton Pattern  (0) 2020.07.02
Design Pattern] Builder  (0) 2020.07.02
GUI Swing ] Factory Method Pattern  (0) 2020.07.01
Design Pattern] Abstract Factory  (0) 2020.06.28

댓글