- 하위 클래스가 어떤 객체 만들지 결정
- 상속을 이용하지만 부모 클래스를 전혀 확장 않는다?(뭔솔)
- 부모 클래스에서 객체 생성할 수 있는 인터페이스 제공
- 자식 클래스는 생성될 객체 유형 자유롭게 변경 가능
- ! 새로운 타입 객체 추가 쉽게 만듦 ! 구성 요소
- Product
- 팩토리 메서드가 생성하는 객체의 인터페이스 or 추상 클래스
- Concrete Product
- Product 인터페이스 or 추상 클래스 구현하는 실제 클래스
- Creator
- 팩토리 메서드 선언하는 추상 클래스 or 인터페이스
- Product를 사용하는 다른 메소드 포함 가능
- Concreate Creator
- Creator 상속받아 팩토리 메서드 구현하고 Concreate Product 객체 반환하는 클래스

- Creator 상속받아 팩토리 메서드 구현하고 Concreate Product 객체 반환하는 클래스
Java Example
Iterator와 Iterable
음 Iterable의 구현체(하위 클래스)는 자기가 원하는 Iterator을 직접 정의해서 생성하는 것…! 크리에이터가 원하는 프로덕트를 생성(Creational)
- Creator
java.lang.Iterable- 여기서
Iterator반환 팩토리 메서드iterator()존재
- Product
java.util.Iterator- 컬렉션 요소 순회 기능 정의(
hasNext(),remove())
- Concrete Creator
Iterable을 구현하는 클래스들- ArrayList, LinkedList, TreeSet 등등
- 각 구현체는
iterator()오버라이딩해서 본인에 적합한Iterator구현체 만드는 것- 예를들어
ArrayList는ArrayListIteraotor을 반환하는 등
- 예를들어
- Concrete Product
- 각 컬렉션 구현체 내부에 정의된
Iterator구현체들 ArrayList$Itr,LinkedList$ListItr,HashSet$Itr
- 각 컬렉션 구현체 내부에 정의된
객체 생성과 사용 분리 유연성 확보