팩토리패턴 -> 어떤 객체를 만들기 위해서 필요한 팩토리 interface를 만든후, 인터페이스를 구현하는 클래스에서 어떤 객체를 만들지 결정하는 패턴
팩토리 패턴의 factory는 concrete class가 아닌 interface를 구현해서 만들어지는 클래스라는 뜻이다
위 그림과 같이 factory가 interface로 선언되면 특정 구현체(concrete class)에 의존하지 않도록 만들 수 있다. 그러면 input에 따라 생성되는 output에 유연성을 만들어낼 수 있다. 즉 interface로 만들어진 factory를 상속받아 구현하면 바로 factory패턴이 된다
팩토리 패턴은 한종류의 객체를 생성하기 위해 사용되지만, 추상 팩토리 패턴은 연관되거나 의존적인 객체로 이루어진 여러종류의 객체를 생성하기 위해 사용된다
또한 팩토리 패턴은 ㅍ팩토리 인터페이스를 구현하여 그 자체가 하나의 객체를 생성하는데 사용되지만, 추상 팩토리패턴은 팩토리 객체가 아닌, 다른 객체 내부에 구현되어 해당 객체에서 여러 타입의 객체를 생성하기 위해 사용된다
concrete class의 구현에 의존하지 않고도 서로 연관된 객체로 이루어진 제품군을 생성하는 인터페이스를 구현다른 객체 안에 넣어 사용하는 것 -> 추상 팩토리 패턴
팩토리 패턴은 그자체로 하나의 객체를 생성하는 역할, 그래서 그 자체가 객체를 생성하는데 사용
하지만 이럴경우, 타입이 다른 다양한 객체를 생성할때 문제가 생긴다 -> 추상팩토리패턴 등장
추상 팩토리 패턴은 다양한 요구사항을 interface 내부에 메소드로 선언하여 interface를 구현하는 클래스에서 요구사항들을 처리
하도록 한다. 또한 그 자체로 사용되는 것이 아닌 다른 객체 내부에서 선언되거나 주입되어 사용된다.