본문 바로가기

카테고리 없음

[Head first design pattern] Factory 패턴

Factory 패턴은 클래스를 사용하는 코드와 생성하는 코드를 분리하는 패턴이다. 

내 생각에 이 패턴은, 클래스를 사용하는 코드들이 분산되어있을때 유용 한것 같다. 

클래스를 사용하는 코드들이 분산되어있으면, 생성하는 코드만 따로 모아두는게 더 코드 확장에 용이하기 때문이다. (ocp) (예를 들어 피자를 bake, prepare, cut 하는 함수들이 pizza 의 멤버 함수가 아니라 어떤 요리를 준비하는 과정으로써 다 분산된 인터페이스로 있다던가)

 

또한, 용암의 종류에 따라 만들어지는 화산이 달라지듯이, 

특정 조건에 따라 만들어지는 타입의 클래스 객체들이 다 다르고, 

그러한 객체들을 공통된 조건을 가진 객체들끼리 분류 할 수 있을때, 팩토리 패턴은 유용한 것 같다. 

 

지역마다 김치 만들때, 

백김치, 총감김치, 깍두기 등등 만들때 

 

공통적으로 뭘 넣는다든지... 그런 거 지역마다 다 다르니까

Factory pattern  이용해도 유용한듯. 

 

 

 

그리고 다시 곱씹어면서 든 생각인데, 

head first design pattern 에 나온 예시에서

 

NYStyleCheesePizza   vs  ChicagoStyleCheesePizza

 

 

 여기서는 분점별로 치즈피자일때, 쓰는 치즈 종류가 다르기 때문에 ( 즉 pizza interface 를 제외하고 공통된 부분이 없기 때문에)   아예 다른 두 클래스로 만드는게 더 나은 것 같다. 만약 두 피자가 공통으로 하고 있는 다른 스타일 피자가 있으면 그 피자를 상속받든지 아니면, 좀 더 유연하게 변경하고 싶으면 decorator 이용해서, 만들어도 될듯. 

 

그런데, 각 분점마다 물론 모든 치즈, 소스, 페페로니 종류가 다 똑같진 않지만, 

피자 스타일이 많아지다 보니, 두 피자의 치즈 종류는 같은경우, 소스 종류는 같은 경우 

이런 경우가 많아지다 보니, 이젠 피자가 아니라 각 재료를 클래스 단위로 만드는게 더 유용하다는 것을 깨달은 거지.. ㅇㅇ