"팩토리 메소드 패턴"의 두 판 사이의 차이

 
(사용자 2명의 중간 판 19개는 보이지 않습니다)
2번째 줄: 2번째 줄:
;factory method pattern; factory method, factory pattern
;factory method pattern; factory method, factory pattern
;팩토리 메소드 패턴, 팩토리 메서드, 팩토리 패턴
;팩토리 메소드 패턴, 팩토리 메서드, 팩토리 패턴
* [[생성 패턴]]의 하나
* 하위클래스에서 인스턴스를 생성하도록 하는 구조
* 하위클래스에서 인스턴스를 생성하도록 하는 구조
* 공장에서 제품을 만들어내듯, OO공장 인스턴스가 OO을 만들어내는 구조
* 공장에서 제품을 만들어내듯, OO공장 인스턴스가 OO을 만들어내는 구조
* 서브클래스에서 오브젝트 생성 방법과 클래스를 결정하도록 강제하는 구조
* 서브클래스에서 오브젝트 생성 방법과 클래스를 결정하도록 강제하는 구조
* 추상 단계<ref>interface 또는 abstract class</ref>에서는 생성하려는 객체의 클래스를 정확히 지정하지 않음
* 생성 책임을 분리한다.
* ConcreteCreator 클래스에 오브젝트 생성을 맡김
* 생성 로직을 클라이언트에서 분리한다.
* 생성 대상 클래스의 생성자를 private으로 만든다.
* 생성할 객체를 결정하기 위해 상속을 사용한다.
* 추상 단계<ref>interface 또는 abstract class</ref>에서는 생성하려는 객체의 클래스를 정확히 지정하지 않는다.
* ConcreteCreator 클래스에 오브젝트 생성을 맡긴다.
* 팩토리 메소드 패턴은 [[템플릿 메소드 패턴]]의 특수한 경우이다.


https://upload.wikimedia.org/wikipedia/commons/thumb/a/a3/FactoryMethod.svg/420px-FactoryMethod.svg.png
==구조==
[[파일:FactoryMethod.svg|420px]]
 
[[File:W3sDesign_Factory_Method_Design_Pattern_UML.jpg]]
* Creator 클래스는, Product1 클래스를 직접 인스턴화하지 않는, Product 객체를 필요로 한다.
* 대신 Creator는 product 객체를 생성하는 개별 factoryMethod()를 참조하는 방식으로는, 인스턴트화할 구체 클래스와 분리된다.
* Creator의 하위클래스들은 인스턴스화할 클래스를 재정의할 수 있다.
* 하위클래스 Creator1는, Product1 클래스를 인스턴화함으로써, factoryMethod()를 구현한다.


==예제 (java)==
==예제 (java)==
<source lang='java'>
<syntaxhighlight lang='java' run>
public class Main {
public static void main(String[] args) {
SedanFactory sedanFactory = new SedanFactory();
Car car = sedanFactory.makeCar();
System.out.println("Type: " + car.getType() );
}
}
 
interface CarFactory {
interface CarFactory {
public Car makeCar();
public Car makeCar();
27번째 줄: 48번째 줄:
public String getType() { return "Sedan"; }
public String getType() { return "Sedan"; }
}
}
 
</syntaxhighlight>
public class Main {
public static final void main(String[] args) {
SedanFactory sedanFactory = new SedanFactory();
Car car = sedanFactory.makeCar();
System.out.println("Type: " + car.getType() );
}
}
</source>


==같이 보기==
==같이 보기==
*[[메소드 오버로딩]]
{{z컬럼3|
*[[템플릿 메소드 패턴]]
* [[DAO]]
*[[싱글턴 패턴]]
* [[싱글턴 패턴]]
*[[컴포지트 패턴]]
* [[디자인 패턴]]
*[[이터레이터 패턴]]
* [[의존성 역전]]
*[[디자인 패턴]]
* [[DAOFactory]]
**[[헤드 퍼스트 디자인 패턴]]
* [[컴포지트 패턴]]
*[[의존성 역전]]
* [[이터레이터 패턴]]
*[[추상 팩토리 패턴]]
* [[메소드 오버로딩]]
*[[DAO]]
* [[추상 팩토리 패턴]]
*[[DAOFactory]]
* [[템플릿 메소드 패턴]]
 
}}
==주석==
<references/>


==참고 자료==
==참고==
*http://en.wikipedia.org/wiki/Factory_method_pattern
* {{영어위키백과|Factory method pattern}}


[[분류: 디자인 패턴]]
[[분류: 디자인 패턴]]

2022년 6월 17일 (금) 15:45 기준 최신판

1 개요[ | ]

factory method pattern; factory method, factory pattern
팩토리 메소드 패턴, 팩토리 메서드, 팩토리 패턴
  • 생성 패턴의 하나
  • 하위클래스에서 인스턴스를 생성하도록 하는 구조
  • 공장에서 제품을 만들어내듯, OO공장 인스턴스가 OO을 만들어내는 구조
  • 서브클래스에서 오브젝트 생성 방법과 클래스를 결정하도록 강제하는 구조
  • 생성 책임을 분리한다.
  • 생성 로직을 클라이언트에서 분리한다.
  • 생성 대상 클래스의 생성자를 private으로 만든다.
  • 생성할 객체를 결정하기 위해 상속을 사용한다.
  • 추상 단계[1]에서는 생성하려는 객체의 클래스를 정확히 지정하지 않는다.
  • ConcreteCreator 클래스에 오브젝트 생성을 맡긴다.
  • 팩토리 메소드 패턴은 템플릿 메소드 패턴의 특수한 경우이다.

2 구조[ | ]

FactoryMethod.svg

W3sDesign Factory Method Design Pattern UML.jpg

  • Creator 클래스는, Product1 클래스를 직접 인스턴화하지 않는, Product 객체를 필요로 한다.
  • 대신 Creator는 product 객체를 생성하는 개별 factoryMethod()를 참조하는 방식으로는, 인스턴트화할 구체 클래스와 분리된다.
  • Creator의 하위클래스들은 인스턴스화할 클래스를 재정의할 수 있다.
  • 하위클래스 Creator1는, Product1 클래스를 인스턴화함으로써, factoryMethod()를 구현한다.

3 예제 (java)[ | ]

public class Main {
	public static void main(String[] args) {
		SedanFactory sedanFactory = new SedanFactory();
		Car car = sedanFactory.makeCar();
		System.out.println("Type: " + car.getType() );
	}
}

interface CarFactory {
	public Car makeCar();
}

interface Car {
	public String getType();
}

class SedanFactory implements CarFactory {
	public Car makeCar() { return new Sedan(); }
}

class Sedan implements Car {
	public String getType() { return "Sedan"; }
}

4 같이 보기[ | ]

5 참고[ | ]

  1. interface 또는 abstract class
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}