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

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

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

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

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

클래스 다이어그램(CampusLife 관련된 클래스)
[그림27] 클래스 다이어그램(CampusLife 관련된 클래스)

 Place는 강의실, 도서관, 기숙사의 기반 클래스로만 사용하기 때문에 추상 클래스로 정의하면 될 것입니다.

장소 클래스와 Place는 일반화 관계
[그림28]  장소 클래스와 Place는 일반화 관계

 Student 클래스도 CStudent, MStudnet, PStudent의 기반 클래스로만 사용하기 때문에 추상 클래스로 정의하면 될 것입니다.

Student클래스와 유형별 학생 클래스
[그림 29] Student클래스와 유형별 학생 클래스

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

Studentd에게 직접 연관관계가 있는 클래스
[그림30] Studentd에게 직접 연관관계가 있는 클래스

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

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