하나의 장바구니라는 어려운 이웃 식료품 지원 프로젝트를 MVC를 분류하여 간단라도 Class Diagram 표시하기 위해 UML에 대해 알아보았다.
UML(Unified Modeling Language)이란?
- 객체 지향적 프로그래밍 컨셉으로 컴포넌트를 표현하는 모델링 언어
- 객체는 동물, 기계 등을 의미할 수 있고, 이 객체가 행위를 수행하기 위한 상호작용과 조작하는 방식을 정의하는 과정이 객체 지향적 프로그래밍
- UML은 각 객체를 기록하여 추적하기 쉽게 만드는 방식 중 하나
특징
- 시각적 그래픽 형태로 작성되어 개발자들 사이에서 원활한 의사소통을 가능하게 한다.
- 개발과정인 분석, 설계, 구현 단계에서 필요한 모델을 명세화할 수 있는 언어이다. I/O를 명확하게 모델링하여 명세서 그대로 개발할 수 있도록 한다.
- 다양한 언어로 변환하여 구축할 수 있다.
UML diagram types
이 많은 Diagram들 중에서 Class Diagram을 중점적으로 살펴보자.
Class Diagram
형식
Object name |
---|
Attributes |
Methods |
각 객체는 이름, 속성, 메소드로 이뤄진 하나의 박스 형태를 띄고 있다. 각 요소에 들어가는 내용을 살펴보자.
Attributes
- 클래스의 각 인스턴스
- fields, variables, properties라고도 불림
Methods
- 클래스의 행위
- operations, functions라고도 불림
Visibility
-
: private
+
: public
#
: protected
~
: package/default
예시
Dog |
---|
+breed: String +gender: String -owner: String -age: number |
+eat() +poo() |
protected(#)와 package/default(~)는 자주 사용되지 않는다고 한다.
Multiplicity
- 각 클래스가 몇 개의 객체들을 가지는지 관계표시
- 한 명의 user는 하나의 웹사이트에서 하나의 아이디와 비밀번호를 가지므로 'no more than one'으로 표시
- 한 명의 user는 주문을 한번도 안 할수도, 여러번 나눠서 할 수 있으므로 'zero or many'로 표시
Relationships between classes
Inheritance
- 부모 클래스 이름은 이탈릭체
- 자식 클래스는 부모 클래스에서 특정 부분에 전문화된 형태
- 화살표 머리는 속이 비어있는 실선으로 표현
- 동물이라는 클래스는 하위의 강아지, 고양이 등의 동물의 특성의 모음으로 정의할 수 있음
Association
- 같은 레벨의 클래스 간에 구조적인 관계성
- 실선이 연결된 모양
Aggregation
- 일정한 특성을 가지고 있는 클래스들의 집합을 나타내는 클래스
- Class1이 Class2의 특성을 가지고 있지만 두가지는 별개로 존재할 수 있음
- Class1을 늑대무리라고 보고 Class2를 한마리의 늑대로 볼 때, Class2는 Class1에 포함될수도 있지만 독립적으로도 존재할 수 있음
- 실선의 빈 다이아몬드 모양으로 표시
Composition
- 자식 객체가 부모 객체 없이 존재할 수 없음
- 예를 들어 Class1을 백화점, Class2를 백화점 내부의 화장실이라고 볼 수 있음. 백화점 내부에는 화장실이 많으므로 그 모든 화장실은 Class1에 내포되어 있는 특성이고 Class1이 무너질 경우 모든 Class2는 사라짐
- 채워진 다이아몬드 모양으로 표시
Dependency
- 상위 클래스의 변화가 dependency로 연결된 하위 클래스의 결과에 영향을 줌 (하위 클래스의 변화는 상위 클래스에 영향주지 않음)
- 점선으로 이뤄진 열려있는 화살표로 표시
진행 중인 '하나의 장바구니' 각 유저 MVC 분류
장기 나눔
장기 | 나누미 | 관리자 | 바드미 |
---|
MODEL | - 개인 정보 | | - 개인 정보 |
VIEW | - 등록 페이지 | - 등록된 바드미와 나누미를 볼 수 있는 어드민 페이지 | - 등록 페이지 |
CONTROL | - 개인 정보 입력 | | - 개인 정보 입력 |
단기 나눔
단기 | 나누미 | 관리자 | 바드미 |
---|
MODEL | - 각 나누미의 포스팅 히스토리(?)
| | - 각 바드미의 받은 물건 내역(?)
|
VIEW | - 포스팅 작성 페이지
| | - 포스팅 디테일 페이지
|
CONTROL | - 포스팅 올리기 - 픽업 요청 수락 또는 거절 | - 지역 기반으로 포스팅보내주기 - 바드미의 요청 나누미에게 전달 - 나누미의 수락 또는 거절 상황 바드미에게 전달 | - 포스팅 선택하기 - 받을 시간 선택하기 |