Factory 패턴은 클래스를 사용하는 코드와 생성하는 코드를 분리하는 패턴이다.
내 생각에 이 패턴은, 클래스를 사용하는 코드들이 분산되어있을때 유용 한것 같다.
클래스를 사용하는 코드들이 분산되어있으면, 생성하는 코드만 따로 모아두는게 더 코드 확장에 용이하기 때문이다. (ocp) (예를 들어 피자를 bake, prepare, cut 하는 함수들이 pizza 의 멤버 함수가 아니라 어떤 요리를 준비하는 과정으로써 다 분산된 인터페이스로 있다던가)
또한, 용암의 종류에 따라 만들어지는 화산이 달라지듯이,
특정 조건에 따라 만들어지는 타입의 클래스 객체들이 다 다르고,
그러한 객체들을 공통된 조건을 가진 객체들끼리 분류 할 수 있을때, 팩토리 패턴은 유용한 것 같다.
지역마다 김치 만들때,
백김치, 총감김치, 깍두기 등등 만들때
공통적으로 뭘 넣는다든지... 그런 거 지역마다 다 다르니까
Factory pattern 이용해도 유용한듯.
그리고 다시 곱씹어면서 든 생각인데,
head first design pattern 에 나온 예시에서
NYStyleCheesePizza vs ChicagoStyleCheesePizza
여기서는 분점별로 치즈피자일때, 쓰는 치즈 종류가 다르기 때문에 ( 즉 pizza interface 를 제외하고 공통된 부분이 없기 때문에) 아예 다른 두 클래스로 만드는게 더 나은 것 같다. 만약 두 피자가 공통으로 하고 있는 다른 스타일 피자가 있으면 그 피자를 상속받든지 아니면, 좀 더 유연하게 변경하고 싶으면 decorator 이용해서, 만들어도 될듯.
그런데, 각 분점마다 물론 모든 치즈, 소스, 페페로니 종류가 다 똑같진 않지만,
피자 스타일이 많아지다 보니, 두 피자의 치즈 종류는 같은경우, 소스 종류는 같은 경우
이런 경우가 많아지다 보니, 이젠 피자가 아니라 각 재료를 클래스 단위로 만드는게 더 유용하다는 것을 깨달은 거지.. ㅇㅇ