2. 2차 확장/변경(1년이 지난 후)

       다.[10점] 김치피자가 인기가 좋아서 뉴욕과 시카고에서도 치피자를 메뉴에 추가 하고자 한다. Dough는 밥 대신 시카고에서 사용하는 ThickCrustDough를 사용한다. 뉴욕에서는 된장이 쉽게 구할 수 있지만 시카고에서는 한국된장이 쉽게 구할 수 있는 재료가 아니라서 일본된장을 사용하기로했다.


[#M_답 보기|닫기|

1. NYPizzaStore와 ChicagoPizzaStore 클래스의 orderPizza() 메소드에 kimchi를 주문할 수 있도록 수정합니다.

2. KimchiPizza의 재료를 구하는 부분을 수정하여 각 지역에 맞는 재료들로 구성되도록 수정합니다.


test 코드를 작성합니다.


먼저 뉴욕과 시카고 피자 가게에서 김치피자를 주문할 수 있도록 코드를 수정합니다.

1번은 위 처럼 간단하게 해결 됐습니다. 이제 2번에 써놓은 것을 처리해야 하는데 이부분이 이번 문제의 핵심영역입니다.


먼저 이전에 만들어 두었던 KimchiPizza 클래스의 일부 소스코드를 보겠습니다.

색칠 된 부분의 코드에서 인터페이스가 아닌 특정 구현을 사용하고 있기 때문에 이 상태에서는 각 지점마다 고유의 김치피자를 생성할 수 없습니다.


우리가 해야 할 것은 서울지점의 김치피자에서는 그대로 밥 dough와 치즈 대신 된장을 사용하는 것입니다. 그리고 시카고의김치피자는 ThickCructDough와 치즈 대신 일본 된장을 사용하는 것입니다. 마지막으로 뉴욕에서도ThickCrustDought와 한국 처럼 그냥 된장을 사용하는 것입니다.


이를 위해서는 다른 재료들처럼 ingredientFactory.createDough()를 사용하면 될 것처럼 보이지만 그렇게 하면 안 됩니다. 왜냐면 다른 피자 클래스들에서도 createDough() 메소드를 사용하고 있기 때문에 만약 김치 피자 때문에 createDough() 메소드가 밥 Dough를 생성하게 되면 다른 피자들까지 전부다 밥Dough를 사용하게 될 것이기 때문입니다.


따라서 createKimchiDough() 와 createDoenjang() 과 같은 새로운 메소드를 인터페이스에 추가하고 각 공장마다 이 메소드들을 구현하여 사용하는 방법을 사용할 것입니다.


위처럼 코드를 수정하고 인터페이스에 각각의 메소드를 선언해 두고 각 재료 공장 마다 해당하는 재료를 생성하도록 수정합니다.

피자 재료 공장에 새로운 메소드를 추가하였습니다. 그리고 각 공장마다 이 메소드들을 구현합니다.



JapanDoenjang 클래스를 구현하면 에러는 사라집니다.


그럼 이제 모든 구현은 끝났습니다. JUnit test를 실행합니다.

_M#]


[#M_ more.. | less.. |

_M#]