객체 생성을 공장(Factory) 클래스로 캡슐화 처리해서 대신 생성하게 하는 생성 디자인 패턴이다.
좀 더 자세하게 설명하자면, 클라이언트에서 직접 new 연산자를 통해 제품 객체를 생성하는 것이 아니라 대신 제품 객체를 생성할 공장 클래스를 만들고, 이를 상속하는 서브 공장 클래스의 메서드에서 여러가지 제품 객체 생성을 각각 책임지는 것을 말한다.
이 패턴을 이용하는 이유는 객체간의 결합도를 낮출 수 있고, 유지보수에 용이해지기 때문이다.
<aside> 💡 그래 공장한테 요청하면 서브 공장 클래스의 메서드에서 제품을 생성한다는 말을 표현한건 알겠는데, **그냥 한 공장에서 다 만들면 안돼? 왜 서브 공장이 필요한데?**라는 물음이 생길 수 있다.
</aside>
이를 이해하기 위해서는 먼저 Factory Method 패턴과 Abstract Factory 패턴의 베이스인 Simple Factory를 알아야한다.
참고로 Simple Factory는 디자인 ‘패턴’이라고는 할 수 없고, OOP에서 자주 쓰이는 관용구라고 보면 된다.
Simple Factory는 객체를 생성해내는 공장을 따로 두는 것이다.
즉, 객체 생성 부분을 전담하는 공장 클래스가 따로 있는 것이다.
객체는 여러 곳에서 생성될 수 있다. 하지만 호출하는 쪽이 객체의 생성자에 직접 의존하고 있다면, 나중에 수정되어야 하는 코드가 많이 발생한다. (밑에서 예시를 통해 확인해보자!)
따라서 생성자 호출(new)을 별도의 클래스(Factory)에서 담당하고 클라이언트 코드에서는 이 Factory를 통해 객체를 생성해야 한다.