소프트웨어 개발할 때, 수집된 요구사항을 클래스 모델링 해야 한다.
클래스 모델링을 하기 위해서는 클래스 다이어그램을 알아야겠다.
클래스 다이어그램을 공부하기 전에 먼저 UML의 개념, UML 다이어그램이 무엇인지 보자.
UML (unified modeling language)
객체지향 소프트웨어를 모델링하기 위한 표준 그래픽 언어다.
시각적으로 모델링하기 위한 통일된 모델링 언어인 것이다.
UML 특징
- 상세한 의미론(semantics)을 가짐
: UML만 보고도 여러 정보를 알 수가 있다.
- 확장 메커니즘을 가짐
- UML 관련 텍스트 언어가 있다. (OCL, object constraint language)
OCL을 통하여 세부적인 제약사항들을 명세할 수 있다.
- UML은 방법론이 아니고, UML의 목적은 소프트웨어의 개발을 돕는 것이다.
UML 다이어그램
UML을 사용하여 시스템의 구조나 각종 관계를 표현한 도면을 표현하는데, 그것이 UML 다이어그램이다.
UML 다이어그램에는 여러 종류가 있다.
- 클래스 다이어그램 (Class)
- 상호작용 다이어그램 (Interaction)
- 상태 다이어그램 (State)
- 활동 다이어그램 (Activity)
- 컴포넌트 다이어그램 (Component)
- 배치 다이어그램 (Depolyment)
이중에서 지금은 클래스 다이어그램을 공부한다.
클래스 다이어그램
클래스 다이어그램에서 기본적으로 알아야 할 구성요소들을 소개한다.
클래스는 속성과 오퍼레이션으로 구성된다.
클래스 다이어그램에는 각 클래스 사이의 '관계'가 선으로 표시되어있다.
─ 클래스: 속성과 오퍼레이션의 집합체
── 속성: 데이터
── 오퍼레이션: 수행될 함수
아래 그림이 클래스 구조이다. 박스 형태로 그리며, 크게 [이름/속성/오퍼레이션] 부분으로 구성된다. 참고로, 속성과 오퍼레이션 부분을 생략하고 간단히 클래스 이름만 표시하는 것도 가능하다. (자유롭게 생각하면 된다) 속성과 오퍼레이션 앞에 + - # 등 마크는 가시성(visibility)을 표시한 것이다. +는 public, #는 protected, -는 private을 의미한다.
─ 관계: 클래스간 관계를 선으로 나타낸다.
클래스간 다양한 관계를 표시하는 방법은 명확하게 잘 알아두어야 한다.
관계의 종류
: 각 화살표 모양으로 표현한다.
관계가 강한 순서는 [의존 < 연관 < 집합 < 합성 < 상속]이다.
(---->) 의존관계 (Dependency) : 일시적으로 참조하는 형태
(──>) 연관관계 (Association) : 필드로 가지고 있는 형태
ㄴ(──◇) 집합관계 (Aggregation) : A◇─B에서 A가 사라져도 B는 상관없다. 안 사라진다.
ㄴ(──◆) 합성관계 (Composition) : A◆─B에서 A가 사라지면 B도 사라진다. (종속적임)
일반화 관계 (Generalization, 상속 관련)
ㄴ일반화 : 클래스의 공통 요소를 일반화
(──▷) 클래스 상속 (Inheritance)
ㄴ상세화 : super class의 요소를 sub class로 구체화
(----▷) 인터페이스 구현(상속)
관계 표현 예시
OCL (Object Constraint Language)
시스템의 제약사항을 나타내는 용도로 설계된 명세 언어이다.
OCL로 나타낸 제약사항은 true / false의 결과만 나타낸다.
다음의 클래스 다이어그램에서 OCL을 확인할 수 있다.
다각형 관련 상속구조를 보여주는 클래스 다이어그램이다.
OCL에서 사용하는 연산자들은 다음과 같다.
OCL의 논리적 연산자
and
or
=
<> (not equal)
<
>
OCL의 산술 연산자
+
-
*
/
연산자 뿐 아니라 다양한 operation과 type도 정해져 있는데, 다음 글을 참고하면 좋을 듯하다.
https://jrc-park.tistory.com/106
.
.
위의 다각형 클래스 다이어그램의 OCL중 몇개를 살펴보자.
클래스 RegularPolygon에서 OCL은 다음과 같이 명세되어있다.
{edge->forAll(e1,e2 | e1.length = e2.length)}
정다각형의 edge들은, 조건 e1.length = e2.length를 만족하는 모든 e1, e2들이라는 것이다.
클래스 Path에서 OCL은 다음과 같이 명세되어있다.
클래스 Path는 length 속성을 가지고 있고, 이에 대하여
{length = edge.length->sum()}
Path의 length는 edge.length이다. 근데 이제 OCL의 operation인 sum()을 곁들인
.
.
OCL은 일단 이정도만 해두고 넘어가자.
─ 끝으로
이렇게 클래스 다이어그램의 개념과 구성요소를 공부했다.
─ 다음 단계
이러한 클래스 다이어그램을 그리려면, 먼저 클래스의 구성요소을 결정했어야 한다.
클래스 다이어그램은 클래스 모델링한 결과를 다이어그램으로 나타내는 것이기 때문이다.
그래서 다음 단계는 클래스 구성요소들을 추출하는 클래스 모델링을 하는 방법&절차를 공부한다.
클래스 모델링한 것을 기반으로 바람직한 클래스 다이어그램을 그릴 수 있어야 한다.
또한 클래스 모델링을 할 때 어디서 많은 실수가 일어나는지 인지하면서 바람직하게 모델링해야 한다.
'기타' 카테고리의 다른 글
[소프트웨어공학] 기능적, 비기능적 요구사항 (0) | 2022.10.25 |
---|---|
[소프트웨어공학] 클래스 모델링의 방법과 절차 (0) | 2022.10.23 |
[소프트웨어공학] 소프트웨어 개발 프로세스 주요 모델 6가지 요약정리 (2) | 2022.10.23 |
모니터나 hdmi 없이 라즈베리파이 화면 원격으로 보기 | 그리고 wifi 자동 설정 (28) | 2022.05.16 |
라즈베리파이 hdmi 모니터 연결 실패 | 해결과 아직 난제인 것... (0) | 2022.05.12 |