• 하위 클래스가 어떤 객체 만들지 결정
  • 상속을 이용하지만 부모 클래스를 전혀 확장 않는다?(뭔솔)

  • 부모 클래스에서 객체 생성할 수 있는 인터페이스 제공
  • 자식 클래스는 생성될 객체 유형 자유롭게 변경 가능

  • ! 새로운 타입 객체 추가 쉽게 만듦 ! 구성 요소
  • Product
    • 팩토리 메서드가 생성하는 객체의 인터페이스 or 추상 클래스
  • Concrete Product
    • Product 인터페이스 or 추상 클래스 구현하는 실제 클래스
  • Creator
    • 팩토리 메서드 선언하는 추상 클래스 or 인터페이스
    • Product를 사용하는 다른 메소드 포함 가능
  • Concreate Creator
    • 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구현체 만드는 것
        • 예를들어 ArrayListArrayListIteraotor을 반환하는 등
  • Concrete Product
    • 각 컬렉션 구현체 내부에 정의된 Iterator 구현체들
    • ArrayList$Itr, LinkedList$ListItr, HashSet$Itr

객체 생성과 사용 분리 유연성 확보