[C#] 7.2.1 클래스 다이어그램 작성

먼저, 시나리오를 보면서 클래스로 정의할 것들을 조사해 봅시다. 시나리오에 나타나는 명사들을 먼저 살펴보고 무언가를 수행할 역할이 있다면 클래스로 정의할 후보가 될 것입니다. 그리고 하나의 클래스가 너무 많은 멤버 필드나 너무 많은 역할을 한다면 좀 더 세부적으로 나누는 것이 효과적일 것입니다. 어느 정도의 멤버 필드가 있을 때 세부적으로 나눌 것인지에 대한 자신의 원칙이 있다면 설계 능력을 키우는 데 도움이 됩니다.

 

시나리오에 있는 것 중에 여기서는 다음과 같이 클래스를 만들려고 합니다.

클래스 명 설명
CampusLife 캠퍼스 생활
Campus 캠퍼스
Place 강의실, 도서관, 기숙사의 기반 클래스
LectureRoom 강의실
Library 도서관
Dormitory 기숙사
Student 학생 – 추상 클래스
CStudent 도전적인 학생
MStudnet 보수적인 학생
PStudent 수동적인 학생

먼저, CampusLife와 관련된 클래스들과의 관계를 살펴보기로 합시다. CampusLife는 캠퍼스와 각 장소로 이루어진다고 할 수 있을 것입니다. 또한, CampusLife는 학생 개체를 생성하는 역할도 수행합니다. 그리고 CampusLife는 실제 프로그램에 해당하는 클래스이므로 단일체로 정의할게요.

[그림27] 클래스 다이어그램(CampusLife 관련된 클래스)
[그림27] 클래스 다이어그램(CampusLife 관련된 클래스)
 Place는 강의실, 도서관, 기숙사의 기반 클래스로만 사용하기 때문에 추상 클래스로 정의하면 될 것입니다.

[그림28] 클래스 다이어그램(각 장소 클래스와 Place는 일반화 관계)
[그림28]  장소 클래스와 Place는 일반화 관계
 Student 클래스도 CStudent, MStudnet, PStudent의 기반 클래스로만 사용하기 때문에 추상 클래스로 정의하면 될 것입니다.

Student클래스와 유형별 학생 클래스
[그림 29] Student클래스와 유형별 학생 클래스
 Campus와 각 장소에서는 학생에게 명령을 내릴 수 있습니다. 강의실에서는 도전적인 학생이 질문할 수 있습니다. 또한, 기숙사에서는 수동적인 학생이 잠꼬대할 수 있습니다. (강의실에서 수동적인 학생이 꾸벅꾸벅 졸면서 자유 토론을 하는 것은 재정의로 표현하기로 하겠습니다.)

[그림30] Studentd에게 직접 연관관계가 있는 클래스
[그림30] Studentd에게 직접 연관관계가 있는 클래스
 [그림 31]은 캠퍼스 생활 프로그램의 클래스 다이어그램입니다. 클래스 다이어그램은 시나리오를 분석하는 방법이나 개발자의 성향에 따라 다르게 나올 수가 있으므로 여러분의 비판적인 사고를 통해 자신에게 맞게 정의한 후에 도식하십시오.

[그림31] 클래스 다이어그램
[그림31] 클래스 다이어그램