7.2 프로젝트 설계
설계 단계에서는 클래스 다이어그램과 시퀀스 다이어그램을 작성을 할게요. 클래스 다이어그램에서는 프로그램에서 정의해야 할 클래스와 클래스 간의 관계를 정의하고 도식합니다. 그리고 시퀀스 다이어그램은 각 기능이 사용자와 개체들 사이에 어떠한 순서로 메시지를 주고받아 진행되는지를 결정할 것입니다. 이 책에서 시퀀스 다이어그램은 서로 다른 개체 사이에서 주고받는 것만 약속하고 도식하겠습니다.
7.2.1 클래스 다이어그램 작성
먼저, 시나리오를 보면서 클래스로 정의할 것들을 조사해 봅시다. 시나리오에 나타나는 명사들을 먼저 살펴보고 무언가를 수행할 역할이 있다면 클래스로 정의할 후보가 될 것입니다. 그리고 하나의 클래스가 너무 많은 멤버 필드나 너무 많은 역할을 한다면 좀 더 세부적으로 나누는 것이 효과적일 것입니다. 어느 정도의 멤버 필드가 있을 때 세부적으로 나눌 것인지에 대한 자신의 원칙이 있다면 설계 능력을 키우는 데 도움이 됩니다.
시나리오에 있는 것 중에 여기서는 다음과 같이 클래스를 만들려고 합니다.
클래스 명 |
설명 |
CampusLife |
캠퍼스 생활 |
Campus |
캠퍼스 |
Place |
강의실, 도서관, 기숙사의 기반 클래스 |
LectureRoom |
강의실 |
Library |
도서관 |
Dormitory |
기숙사 |
Student |
학생 - 추상 클래스 |
CStudent |
도전적인 학생 |
MStudnet |
보수적인 학생 |
PStudent |
수동적인 학생 |
먼저, CampusLife와 관련된 클래스들과의 관계를 살펴보기로 합시다. CampusLife는 캠퍼스와 각 장소로 이루어진다고 할 수 있을 것입니다. 또한, CampusLife는 학생 개체를 생성하는 역할도 수행합니다. 그리고 CampusLife는 실제 프로그램에 해당하는 클래스이므로 단일체로 정의할게요.
[그림27] 클래스 다이어그램(CampusLife 관련된 클래스)
Place는 강의실, 도서관, 기숙사의 기반 클래스로만 사용하기 때문에 추상 클래스로 정의하면 될 것입니다.
[그림28] 클래스 다이어그램(각 장소 클래스와 Place는 일반화 관계)
Student 클래스도 CStudent, MStudnet, PStudent의 기반 클래스로만 사용하기 때문에 추상 클래스로 정의하면 될 것입니다.
[그림29] 클래스 다이어그램(Student클래스와 유형별 학생 클래스)
Campus와 각 장소에서는 학생에게 명령을 내릴 수 있습니다. 강의실에서는 도전적인 학생이 질문할 수 있습니다. 또한, 기숙사에서는 수동적인 학생이 잠꼬대할 수 있습니다. (강의실에서 수동적인 학생이 꾸벅꾸벅 졸면서 자유 토론을 하는 것은 재정의로 표현하기로 하겠습니다.)
[그림30] 클래스 다이어그램(Student에게 직접 연관관계가 있는 클래스)
[그림 31]은 캠퍼스 생활 프로그램의 클래스 다이어그램입니다. 클래스 다이어그램은 시나리오를 분석하는 방법이나 개발자의 성향에 따라 다르게 나올 수가 있으므로 여러분의 비판적인 사고를 통해 자신에게 맞게 정의한 후에 도식하십시오.
[그림31] 캠퍼스 생활 클래스 다이어그램
너와 나의 연결고리 "공감"
'언어 자료구조 알고리즘 > Escort C#' 카테고리의 다른 글
[C#] 7.3 설계한 내용 프로젝트에 옮기기 - 판서 강의 (2) | 2016.05.03 |
---|---|
[C#] 7.3 설계한 내용 프로젝트에 옮기기 - 초점 이동 (0) | 2016.05.03 |
[C#] 7.3 설계한 내용 프로젝트에 옮기기 - 학생 이동 (0) | 2016.05.03 |
[C#] 7.3 설계한 내용 프로젝트에 옮기기 - 클래스 추가 (0) | 2016.05.03 |
[C#] 7.2.2 프로젝트 설계 - 시퀀스 다이어그램 (0) | 2016.05.03 |
[C#] 7. 프로젝트 - 시나리오 (2) | 2016.05.03 |
[C#] 6.2.6 sealed 키워드를 이용한 봉인 (0) | 2016.05.02 |
[C#] 6.2.5 abstract 키워드를 이용한 추상화 (0) | 2016.05.02 |
[C#] 6.2.4 가상화 virtual, 재정의 override (0) | 2016.05.02 |
[C#] 무효화 - new 키워드, base 키워드 (0) | 2016.05.02 |