1) [30점] 교과서 4장의 문제를 확장/변경 하고자 한다. 여러 가지 확장/변경의 가능성이 있다. 이번 문제에서는 2차에 걸쳐서 확장/변경 하고자 한다. 프로그램에서 고친 부분을 보여라. 디자인 패턴을 사용해서 어떤 부분이 확장/변경이 용이하도록 해 주었는지 설명하라.

 

1. 1차 확장/변경

     

  가.[10점] 서울에 분점을 내고자 한다. 일반적으로 뉴욕의 피자와 같지만 서울

          사람들은 치즈를 좋아하지 않아서 일반적인 경우의 1/2만 사용한다. 그리고

          페퍼로니 피자의 경우 짜지 않은 “야채페퍼로니”를 사용한다.



[#M_ more.. | less.. |

1. PizzaStore 클래스를 상속받는 SeoulStore 클래스를 구현한다.

2. PizzeIngrediantFactory 인터페이스를 implements하는 SeoulIngrediantFactory를 구현하고 HalfChees와 VegetPepperoni를 구현하다.


먼저 클래스 다이어그램은 다음과 같다.


주황색 부분을 구현하면 됩니다.


먼저 test를 작성하겠습니다.


파란색 부분의 코드 세 줄로 간단히 test 코드를 작성하였습니다. 현재 SeoulStore 클래스가 존재하지 않기 때문에 eclipse에서 에러가 표시 된 것을 볼 수 있습니다.


그럼 이제 SeoulStore 클래스를 구현합니다.


SeoulIngredientFactory를 구현하지 않았기 때문에 역시 에러가 표시 된 것을 확인 할 수 있습니다.


하지만 test 코드의 에러는 사라졌습니다. 일단 여기서 JUnit test를 하면 분명히 NullPointerException이발생할 것입니다. SeoulIngredentFactory를 구현하지 않았기 때문입니다. 과연 예상과 맞는지 확인해 보겠습니다.



예상대로 test를 통과하지 못했습니다. 어떤 에러인지 보여주진 않지만 에러를 발생시킨 Stack Trace를 아래에 표시해주고있고 있습니다. Stack Trace의 맨 위가 SeoulIngrediantFactory를 생성하는 부분이라는 것을 확인했습니다.


그럼 이제 SeoulIngrediantFactoty 클래스를 구현합니다.

SeoulIngredientFactory는 반쪽짜리 치즈와 야채 페퍼로니를 사용합니다. 따라서 현재 반쪽짜리 치즈와 야채 페퍼로니도 구현합니다.


이제 모든 구현이 끝났습니다. test코드에 pepperoni pizza 주문을 추가하고(서울 재료 공장에서 야채 페퍼로니를 쓰는지 확인하기 위해서) JUnit test를 합니다.

커맨드 창에 출력된 결과입니다.


_M#]