(새 문서: ==개요== ;factory method pattern; factory method ;팩토리 메소드 패턴, 팩토리 메서드 *공장에서 제품을 만들어내듯, OO공장 인스턴스가 OO을 만들어...) |
(→구조) |
||
(사용자 2명의 중간 판 42개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
==개요== | ==개요== | ||
;factory method pattern; factory method | ;factory method pattern; factory method, factory pattern | ||
;팩토리 메소드 패턴, 팩토리 메서드 | ;팩토리 메소드 패턴, 팩토리 메서드, 팩토리 패턴 | ||
*공장에서 제품을 만들어내듯, OO공장 인스턴스가 OO을 만들어내는 구조 | * [[생성 패턴]]의 하나 | ||
* | * 하위클래스에서 인스턴스를 생성하도록 하는 구조 | ||
* 공장에서 제품을 만들어내듯, OO공장 인스턴스가 OO을 만들어내는 구조 | |||
* 서브클래스에서 오브젝트 생성 방법과 클래스를 결정하도록 강제하는 구조 | |||
* 생성 책임을 분리한다. | |||
* 생성 로직을 클라이언트에서 분리한다. | |||
* 생성 대상 클래스의 생성자를 private으로 만든다. | |||
* 생성할 객체를 결정하기 위해 상속을 사용한다. | |||
* 추상 단계<ref>interface 또는 abstract class</ref>에서는 생성하려는 객체의 클래스를 정확히 지정하지 않는다. | |||
* ConcreteCreator 클래스에 오브젝트 생성을 맡긴다. | |||
* 팩토리 메소드 패턴은 [[템플릿 메소드 패턴]]의 특수한 경우이다. | |||
== | ==구조== | ||
* | [[파일:FactoryMethod.svg|420px]] | ||
[[File:W3sDesign_Factory_Method_Design_Pattern_UML.jpg]] | |||
* Creator 클래스는, Product1 클래스를 직접 인스턴화하지 않는, Product 객체를 필요로 한다. | |||
* 대신 Creator는 product 객체를 생성하는 개별 factoryMethod()를 참조하는 방식으로는, 인스턴트화할 구체 클래스와 분리된다. | |||
* Creator의 하위클래스들은 인스턴스화할 클래스를 재정의할 수 있다. | |||
* 하위클래스 Creator1는, Product1 클래스를 인스턴화함으로써, factoryMethod()를 구현한다. | |||
==예제 (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 { | |||
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"; } | |||
} | |||
</syntaxhighlight> | |||
==같이 보기== | |||
{{z컬럼3| | |||
* [[DAO]] | |||
* [[싱글턴 패턴]] | |||
* [[디자인 패턴]] | |||
* [[의존성 역전]] | |||
* [[DAOFactory]] | |||
* [[컴포지트 패턴]] | |||
* [[이터레이터 패턴]] | |||
* [[메소드 오버로딩]] | |||
* [[추상 팩토리 패턴]] | |||
* [[템플릿 메소드 패턴]] | |||
}} | |||
==참고== | |||
* {{영어위키백과|Factory method pattern}} | |||
[[분류: 디자인 패턴]] | [[분류: 디자인 패턴]] |
2022년 6월 17일 (금) 15:45 기준 최신판
1 개요[ | ]
- factory method pattern; factory method, factory pattern
- 팩토리 메소드 패턴, 팩토리 메서드, 팩토리 패턴
- 생성 패턴의 하나
- 하위클래스에서 인스턴스를 생성하도록 하는 구조
- 공장에서 제품을 만들어내듯, OO공장 인스턴스가 OO을 만들어내는 구조
- 서브클래스에서 오브젝트 생성 방법과 클래스를 결정하도록 강제하는 구조
- 생성 책임을 분리한다.
- 생성 로직을 클라이언트에서 분리한다.
- 생성 대상 클래스의 생성자를 private으로 만든다.
- 생성할 객체를 결정하기 위해 상속을 사용한다.
- 추상 단계[1]에서는 생성하려는 객체의 클래스를 정확히 지정하지 않는다.
- ConcreteCreator 클래스에 오브젝트 생성을 맡긴다.
- 팩토리 메소드 패턴은 템플릿 메소드 패턴의 특수한 경우이다.
2 구조[ | ]
- Creator 클래스는, Product1 클래스를 직접 인스턴화하지 않는, Product 객체를 필요로 한다.
- 대신 Creator는 product 객체를 생성하는 개별 factoryMethod()를 참조하는 방식으로는, 인스턴트화할 구체 클래스와 분리된다.
- Creator의 하위클래스들은 인스턴스화할 클래스를 재정의할 수 있다.
- 하위클래스 Creator1는, Product1 클래스를 인스턴화함으로써, factoryMethod()를 구현한다.
3 예제 (java)[ | ]
Java
CPU
1.3s
MEM
71M
0.9s
Copy
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"; }
}
Type: Sedan
4 같이 보기[ | ]
5 참고[ | ]
- ↑ interface 또는 abstract class
편집자 Jmnote
로그인하시면 댓글을 쓸 수 있습니다.