팩토리 메소드 패턴은 인스턴스를 만드는 절차를 추상화하는 패턴
객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만듦.
즉, 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것.
single method가 여러 종류의 객체를 생성하는 것.
getInstance()
메소드를 통해 인스턴스 반환하는데, User
클래스 내부에서는 Product
객체를 직접 생성하지 않음.
팩토리 클래스에 인스턴스 요청, 생성된 인스턴스를 반환받는 것으로 사용.
Product 생성자가 변경될 때는 Factory의 getInstance() 메소드 내부의 Product 생성자만 변경시켜주면 됨
(https://velog.io/@ellyheetov/Factory-Pattern)
인터페이스를 이용하여 서로 연관되거나 의존하는 객체를 구상 클래스를 지정하지 않고도 생성
팩토리 메소드 패턴은 각각 다른 객체들이 필요할 때 사용, 추상 팩토리 패턴은 서로 연관있는 객체들의 조합이 필요할 때 사용
NYPizzaSotre의 CreatePizza() 함수가 NYCheesePizza, NYClamPizza 등 모두 생산
즉, 하나의 메소드가 여러 종류의 Pizza 생성
ChicagoIngredientFactory는 팩토리 메소드 패턴의 NYPizzaStore와 유사: 상위 interface 구현
차이점을 살펴보면, createDough() 메소드가 생성하는 객체는 ThinCrustDough 한 가지 뿐이다
createSauce(), createCheese() 도 마찬가지
즉, 여러 종류를 생산하는 메소드가 아닌, factory object별 한 종류의 객체를 생성한 것 -> 한 종류의 제품군을 생성할 때 유리하게 사용