※ 일본의 한 포스팅을 번역한 내용입니다. 오역 및 직역이 있을 수 있으며, 틀린 내용이 있다면 지적해주시면 감사하겠습니다.
클래스 다이어그램이란?
클래스 다이어그램이란 클래스의 구성이나 클래스 간의 관계, 역할을 표현하기 위한 그림으로 1개의 클래스를 표현하는 기본 요소는 아래의 세 가지이다.
- 클래스
- 속성
- 조작
또한 각 요소는 위의 순서대로 기재해야하며 요소마다 선으로 구분한다.
이 그림을 예로 살펴보자면, 클래스명은 "사원", 속성은 "사원 번호", "이름", '주소"이며, 조작은 "출근한다", "퇴근한다"라고 표현할 수 있다.
그리고 클래스 간의 관계에 대해서도 추가해서 살펴보자.
사원 - 회사의 클래스가 선으로 연결되어 있으므로 어떠한 관계로 이어져 있음을 추론할 수 있다. 이제 관계와 관련된 구체적인 표현 요소들을 살펴보자.
클래스와 클래스간의 관계 표현 요소
다중도
예를 들어, 사원이 1개의 회사에 소속되어 있는 경우 다음과 같이 표현할 수 있다.
방금 봤던 관계를 표시하는 선 옆에다가 "0..", "1"이라고 표기하면 된다. 이 그림의 다중도 표현은 "사원"에서 봤을 때 "회사" 1개에 소속되어 있다는 의미이다. "회사"의 입장에서는 사원이 "0"명 이상 있음을 표시한 것이다.
이러한 다중도는 UML에서는 없는 표현 방법으로 ER다이어그램에는 있지만, ER다이어그램의 경우 사원과 회사는 다대1의 관계가 있다고 표현한다.
집약(aggregation)
집약이란 관계 표현의 하나의 방법으로, "전체와 일부"이라는 관계를 표현한다. UML에서는 집약은 실선으로 표시하고, "전체"쪽의 끝단에 흰마름모꼴을 붙인다.
관계명
다중도와 집약이라는 표현에 따라 어떠한 관련성이 있는지를 알 수 있게 됐다. 사원과 회사라는 것은 분명하게 나눠져 있으므로, 고용쪽과 비고용쪽의 관계라는 것을 추정할 수 있지만, 잘 알 수 없는 클래스 사이라면 다중도나 집약만으로는 어떠한 의미를 가진 관계인지 알기 어렵다. 이러한 문제를 해결하기 위해 관계명이라는 편리한 것이 존재한다.
사원과 회사 간의 관계명을 추가하면 다음과 같다.
위 그림과 같이 관계명은 ▶를 사용하여 표시한다. 사원은 회사에서 일을 한다는 관계 방향성이 표현됐다. 관계명은 단순히 어떤 관계인가를 표현하는 정도에 불과하다. 지금부터는 다른 클래스를 포함하여, 또 다른 표현 요소에 대해 알아보자.
클래스 다이어그램에서 다양한 관계성을 표현하는 방법
클래스 다이어그램에서 또 다른 관계성의 표현들은 아래와 같다.
- 일반화 관계(generalization)
- 실제화 관계(realization)
- 의존 관계(dependency)
- 집약 관계(aggregation)
- 집합관계(composition)
- 제약(Constraint)
이번 포스팅에서는 자주 사용되는 관계만 몇 가지 살펴보고자 한다.
일반화 관계(generalization)
일반화이란 클래스간 속성이나 조작, 관계를 물려 받는 것(상속)을 말한다. 화살표 방향은 계승해주는 곳에서 부터 계승받는 방향이다.
집합 관계(composition)
집합은 집약보다도 강력한 집약을 의미한다. 구체적으로는 일부가 갖추어져 있지 않으면 전체가 성립되지 않는다. 혹은 전체가 소멸되면 일부도 같이 소멸되어 버리는 것을 표현한다. UML에서는 집약은 실선으로 표시하고, "전체"쪽의 맨 끝에는 검게 채워진 마름모꼴을 붙인다.
의존 관계(dependency)
UML의 클래스 다이어그램에서 사용하기 어려운 것으로 No.1이며, 의존은 어떤 모델 요소가 다른 모델 요소를 참조하고 있는 관계를 의미한다. 의존하는 곳에서 의존받은 곳으로 점선 + 방향 화살표를 이용해 표현한다. 의존원(의존 받는 곳)이 변경되면, 의존하는 곳도 변경될 수 밖에 없는 것을 명시적으로 표시하기 위해 의존을 사용한다.
참고자료
https://qiita.com/devopsCoordinator/items/213e45694dfac0edcfbc
'IT > 기초 지식' 카테고리의 다른 글
[Azure] AWS와 비교한 Azure의 환경 구축 특징(AWS와 Azure의 차이) (2) | 2022.04.11 |
---|---|
[git] git submodule 기초 (0) | 2022.04.04 |
[Docker] NVIDIA Container Toolkit(NVIDIA Docker)의 동작원리 (0) | 2022.02.18 |
[Docker/Linux] Docker상의 Volume에서 permission denied 에러가 발생할 때 해결법 (0) | 2022.02.10 |
[AWS] 기존의 EC2 인스턴스에 새로운 EBS 연결(mount)하기 (2) | 2022.02.09 |