반응형

소프트웨어 설계 73

[C#] 7.2.2 프로젝트 설계 - 시퀀스 다이어그램

7.2.2 시퀀스 다이어그램 작성 클래스 다이어그램을 작성하였으면 시나리오를 기반으로 분석된 기능별로 시퀀스 다이어그램을 작성합시다. 먼저, 초기화 과정에 대해 살펴봅시다. 초기화에서는 캠퍼스 생성과 장소들을 생성하는 것과 학생 생성이 진행하기로 되어 있습니다. 캠퍼스 생성이나 장소들을 생성하는 것은 사용자와의 상호 작용 없이 진행되기 때문에 단순히 생성자만 호출하면 됩니다. 그리고 학생 생성은 사용자에 의해 생성할 학생 수를 입력, 생성할 학생 유형을 선택, 학생의 이름을 결정하기 위해 상호 작용이 필요합니다. 또한, 생성된 학생은 Campus에 보내야겠지요. [그림32 - A] 초기화 시퀀스 다이어그램(캠퍼스와 장소 생성) [그림32 - B] 초기화 시퀀스 다이어그램(학생 생성) [그림32] 초기화 ..

[C++] 67. 실현(REALIZATION) 관계

[C++] 67. 실현(REALIZATION) 관계 실현 관계는 기능 구현을 약속한 형식과 이를 구체적으로 구현한 형식 사이에 관계입니다. 기능 구현을 약속한 형식을 인터페이스라고 부릅니다. 따라서 실현 관계는 인터페이스 형식과 약속한 기능을 구체적으로 구현한 형식 사이의 관계입니다. CPP에서는 이 둘 사이의 관계는 파생 문법을 사용합니다. 이에 관한 사항은 이미 앞에서 인터페이스를 소개하면서 다룬 내용입니다. #include using namespace std; #define interface struct interface IStudy { virtual void Study()=0; }; class Student : public IStudy { public: void Study() { cout

[C++] 66. 의존(DEPENDENCY) 관계

[C++] 66. 의존(DEPENDENCY) 관계 의존 관계는 다른 개체의 변화가 발생했을 때 자신에 영향을 받는 개체 사이의 관계입니다. 그리고 특정 개체의 생성을 담당할 때도 의존 관계로 표현합니다. GUI(Graphic User Interface) 프로그램에서 특정 데이터의 정보를 화면에 표시하는 컨트롤과 데이터 사이에는 의존 관계로 표현할 수 있습니다. UI 컨트롤을 통해 사용자가 개체의 속성을 입력하면 의존 관계에 있는 개체의 속성을 변경해야겠죠. 혹은 개체의 속성이 변하면 UI 컨트롤을 통해 변경한 정보를 사용자에 알려주어야 할 것입니다. 이 책에서는 GUI를 다루고 있지 않아 이와 같은 의존 관계는 표현하지 않을 거예요. 소프트웨어 설계에 관한 많은 레퍼런스에서는 UI 컨트롤과 개체 사이의 ..

[C++] 65. 연관(ASSOCIATION) 관계

[C++] 65. 연관(ASSOCIATION) 관계 연관 관계는 명령 개체와 피 명령 개체가 명확하지 않은 관계입니다. 프로그램에서는 연관 관계로 표현하지 말고 직접 연관 관계로 표현하는 것이 안전합니다. 연관 관계는 약사와 의사처럼 "약사와 의사는 환자 치료에 연관이 있다."와 같이 수평적인 관계입니다. 의사는 환자 치료를 위해 어떠한 약을 처방받아 먹고 있는지 알 수 있어야 합니다. 또한 약사는 약을 조재하기 위해서는 의사의 처방이 필요합니다. 그런데 이와 같은 관계에서 프로그램을 잘못 작성하여 버그가 날 위험이 많습니다. 예를 들어 의사의 “치료하다” 기능에서 약사의 “조재하다”를 호출하게 구현하고 약사의 “조재하다” 기능에서 의사의 “치료하다”를 호출한다면 스택 오버 플로우가 발생할 것입니다. 물..

[C++] 64. 직접 연관(DIRECTED ASSOCIATION) 관계

[C++] 64. 직접 연관(DIRECTED ASSOCIATION) 관계 직접 연관 관계는 프로그램에서 가장 흔하게 볼 수 있는 관계로 명령을 내리는 개체와 명령을 받아 수행하는 개체의 관계입니다. “고용자는 피 고용자에게 일을 시킬 수 있다.” 처럼 프로그램 세계에서는 매우 자연스러운 관계입니다. 목적 집단에서 목적을 달성하기 위해 상하 관계가 존재하는 것처럼 프로그램도 특정 목적을 수행하기 위한 코드 집합이어서 직접 연관 관계가 필요합니다. 특히 직접 연관 관계는 집합 관계나 구성 관계와 혼합 형태일 때도 많습니다. 예를 들어 회사 내부에 사원들이 있고 회사에서 특정 사원에게 일을 시킨다면 회사와 사원은 집합 관계이면서 직접 연관 관계입니다. 다음은 Company와 Worker 사이에 직접 연관 관계..

[C++] 63. 구성(COMPOSITION) 관계

[C++] 63. 구성(COMPOSITION) 관계 구성 관계는 소유 개체와 피 소유 개체 사이의 관계입니다. 이러한 관계는 집합 관계도 마찬가지입니다. 두 가지 관계 모두 “가지다.”로 표현할 수 있으며 영어로 “Has a”로 표현할 수 있어서 “Has a”관계라고 말합니다. 집합 관계는 소유 개체와 피 소유 개체의 생성과 소멸은 독립적으로 진행합니다. 필통과 연필의 관계처럼 개체의 생성과 소멸은 독립적인 특징을 갖습니다. 구성 관계는 소유 개체를 생성할 때 피 소유 개체를 생성하고 소유 개체를 소멸할 때 피 소유 개체를 함께 소멸합니다. 사람과 눈의 관계처럼 소유 개체를 생성할 때 피 소유 개체도 함께 생성하고 소유 개체를 소멸할 때 피 소유 개체도 함께 소멸합니다. CPP에서 구성 관계를 구현하는 ..

[C#] 방문자 패턴(Visitor Pattern) - 구현

25. 방문자 패턴(Visitor Pattern) [그림] 방문자 패턴(Visitor Pattern) 클래스 다이어그램 25.4 구현 반복자 패턴에 대한 예제 프로그램을 구현하는 순서는 Element 군, Visitor 군, MyTour와 데모 코드 순으로 하겠습니다. 25.4.1 Element 군 MyTour는 사진과 일기를 통합 관리하는 컬렉션 입니다. 사진과 일기와 같이 MyTour에서 관리 가능한 요소에 대한 기반 클래스를 Element라 정하고 사진을 Picture, 일기를 Diary라 정하겠습니다. 방문자 패턴에서는 요소에 따라 다르게 처리해야 할 기능들을 구체화 된 방문자 형식을 정의를 하고 실제 요소 형식에서는 단순히 방문자를 수용하는 메서드만 정의를 합니다. 즉, 실질적인 구현은 각 요소..

[C#] 방문자 패턴(Visitor Pattern) - 설계(Design)

25. 방문자 패턴(Visitor Pattern) 25. 3 디자인 반복자 패턴에 대한 설명을 위한 예제로는 여행에 대한 일기 형식의 기록과 사진을 통합 관리하는 응용을 가지고 보여 드릴께요.. 응용에는 여행에서의 사진과 일기를 보관하는 컬렉션을 두려고 합니다. 일단, 사진과 일기는 해당 컬렉션에 같이 보관할 수 있게 하기 위해 기반 클래스를 만들어야 겠지요. 그리고, 해당 컬렉션에 특정 명령을 내렸을 때 사진이나 일기에 따라 구체적 행위가 다르게 적용해야 하는 기능들을 추상화 하여 방문자를 정의할 것입니다. 그리고, 사진과 일기의 기반 클래스에서는 방문자를 수용할 수 있게 하고 방문자에서 자신을 처리할 수 있는 메서드를 호출하게 할께요. 대신 방문자에서는 일기와 사진과 같은 요소 형식들에 따라 처리하는..

[C#] 방문자 패턴(Visitor Pattern) - 개요, 시나리오

25. 방문자 패턴(Visitor Pattern) 25.1 개요 프로그래밍을 하다 보면 여러 구성 요소들로 구성된 개체를 정의해야 하는 경우는 매우 흔한 일입니다. 그리고, 특정 명령을 수행함에 있어 내부 구성 요소 개체들의 형식에 따라 적용해야 할 구체적 행위가 다른 경우가 있을 것입니다. 이와 같은 경우에 방문자 패턴을 사용하면 개체들의 형식에 따라 적용해야 할 구체적 행위를 분리하여 정의할 수 있습니다. 이는 새로운 행위를 정의할 필요가 생길 경우에도 구성 요소 형식을 변경하지 않으면서 추가할 수 있게 됩니다. 방문자 패턴에서는 개체를 구성하는 여러 요소 개체들에게 요소의 형식에 따라 수행할 구체적 작업을 방문자에 정의하게 됩니다. 대신 요소의 형식에서는 방문자를 수용하는 메서드를 제공을 하고 방문..

[C#] 템플릿 메서드 패턴(Template Method Pattern) - 구현

24. 템플릿 메서드 패턴(Template Method Pattern) [그림] 템플릿 메서드 패턴(Template Method Pattern) 클래스 다이어그램 24.4 구현 템플릿 메서드 패턴에 대한 예제 프로그램을 구현하는 순서는 EHApp, MyApp 순으로 하겠습니다. 24.4.1 EHApp EHApp 클래스에서 사용자에 노출할 메서드는 Do 메서드 하나입니다. 그리고, Do 메서드에서 수행할 작업 절차는 초기화, 사용자와 상호 작용, 해제화를 하는 것으로 정하였습니다. public void Do(){ InitInstance(); Run(); ExitInstance();} 그리고, 초기화와 해제화의 경우는 실제 작성할 응용의 목적에 따라 재 정의를 할 수 있어야 겠지요. protected vir..

반응형