이런 것이야 말로 진짜 시험 아닌가... 저는 그렇게 생각합니다.
5박 6일 짜리 taking home 시험 이랍니다. 하루에 하나씩 풀어야겠네요.

[#M_문제보기|닫기|
중간고사 2006/10/18                      국민대학교/BIT학부/엔터프라이즈 컴퓨팅

1) [30점] 교과서 4장의 문제를 확장/변경 하고자 한다. 여러 가지 확장/변경의 가능성이 있다. 이번 문제에서는 2차에 걸쳐서 확장/변경 하고자 한다. 프로그램에서 고친 부분을 보여라. 디자인 패턴을 사용해서 어떤 부분이 확장/변경이 용이하도록 해 주었는지 설명하라.
  1. 1차 확장/변경
   가.[10점] 서울에 분점을 내고자 한다. 일반적으로 뉴욕의 피자와 같지만 서울 사람들은 치즈를 좋아하지 않아서 일반적인 경우의 1/2만 사용한다. 그리고 페퍼로니 피자의 경우 짜지 않은 “야채페퍼로니”를 사용한다.
   나.[10점] 서울분점에서는 메뉴에 김치피자를 추가 하고자 한다. 김치피자에서는 Dough를 밥으로 만들어야 하고, 치즈대신 된장을 사용한다.
  2. 2차 확장/변경(1년이 지난 후)
   다.[10점] 김치피자가 인기가 좋아서 뉴욕과 시카고에서도
     김치피자를 메뉴에 추가 하고자 한다. Dough는 밥 대신 시카고에서 사용하는 ThickCrustDough를 사용한다. 뉴욕에서는 된장이 쉽게 구할 수 있지만 시카고에서는 한국된장이 쉽게 구할 수 있는 재료가 아니라서 일본된장을 사용하기로했다.

2) [20점] 시스템을 확장/변경 할 때 class의 수가 급격하게 늘어나는 경우가 생긴다. 이를 방치하면 관리가 어려워진다. 이 문제를 해결하기 위해 사용한 방법들을 보이고 어떻게 했는지를 설명하라. 우리가 지금까지 배운 것 중에서 예를 보여라.    

3) [30점] 우리가 원하는 것은 flexible 하고 extendable 해서, 장기적으로 적은 비용으로 효율적인 시스템을 만드는 일이다. 이것을 위해 몇 가지 원칙들을 사용해 왔다. 아래에 열거한 것들이 그 대표적인 것들이다. 이들이 지금까지 우리가 배운 디자인 패턴에서 어떻게 사용되고, 어떻게 우리가 원하는 것을 충족시켜왔는지를 설명하라.
   1.[10점] 바뀌는 부분을 캡슐화 한다.
   2.[10점] 서로 상호작용을 하는 객체 사이에서는 가능하면 느슨하게 결합하는
      디자인을 사용해야 한다.
   3.[10점] 클래스는 확장에 대해서는 열려있고 변경에 대해서는 닫혀있어야 한다.

4) [10점] 옵져버 패턴에서는 푸시방식과 풀 방식이 있다고 했다. 2장에서는 푸시 방식만 보였다. 이번에는 풀 방식을 보여라.

5) [10점] 가상대학에 올라와 있는 프로그램숙제의 예제들을 조사해서 잘못된 점들을 지적하고 수정하여라. 왜 잘못되었는지를 설명하고 수정 후에는 어떻게 좋아졌는지를 설명하라.
_M#]
교수님 개그 센스가 쥑여 주십니다! (__)/