-
UML 뜯어보기 ( 2 ) Class 및 Sequence Diagram카테고리 없음 2022. 5. 9. 22:29반응형
[ UML에 관한 전편 게시물 ] https://guru.tistory.com/109
Class Diagram ( 클래스 다이어그램 )
Class Diagram을 설계하기 전에 , "왜 사용할까 ?" 라는 의문이 생긴다면, 클래스 다이어그램은 객체들 간의 관계, 속성, 그리고 함수들을 정의 함으로써, 구조적인 형태를 미리 만들어 볼 수 있으며, 콘셉트의 형태를 자리 잡을 수 있다는 장점이 있습니다.
그럼 Class Diagram 을 만들기 전에 어떤 구성요소가 있는지 알아봅시다. Class Diagram 은 클래스 , 스테레오 타입, 클래스 간의 관계 등으로 만들 수 있습니다. 그럼 각각에 대해 살펴봅시다.
2-1. Class Diagram의 Class
쉽게 말해, Class 의 구성이 어떻게 되어있냐를 나타내는 항목으로, 보통 클래스의 이름, 속성, 기능들을 표시하게 됩니다. 이때, 각 클래스 멤버에 대해서 Visibility를 정해줄 수 있는데
- + : public 멤버
- - : private 멤버
- # : Protected 멤버
- ~ : Packaged 멤버
로 나타낼 수 있습니다. 또한 Class 의 세부사항은 필드에서 함수명, 데이터 타입, 리턴 타입 등을 명시하여, 나타내 줄 수 있습니다. 간단한 예를 들어 다음과 같은 Class Diagram 이 있다 했을 때,
이를 코드로 작성하게 된다면,
class Circle { private: double radius: Point Center; public: setRadius(double radius); setCenter(Point center); double getArea(); double getCircunfrence(); };
와 같이 표현이 가능하게 됩니다.
2-2. Class Diagram 의 Stereo Type
스테레오 타입이란 UML 에서 제공하는 기본 요소 외에 추가적인 확장 요소를 나타내는 것으로 쌍 꺾쇠 외 비슷하게 생긴 길러멧(guillemet, « » ) 사이에 적습니다. 대략 어떤 타입의 Class 를 나타내는지를 주로 적습니다. 대략 밑의 방식으로 적습니다.
2-3. Class Diagram 의 Relationships
마지막으로 살펴볼 것은 Relationship 으로써, 다른 클래스와 객체들 사이의 관계를 나타내게 됩니다. 총 7가지의 종류가 존재하고,
- Generalization (일반화)
- Realization (실제화)
- Dependency (의존화)
- Association (연관화)
- Aggregation (집합)
- Composition (합성)
과 같이 존재하게 된다.
1. Assocatiation ( 연관 ) 이란 .
다른 객체의 참조를 가지고 있는 클래스를 나타내면서, 화살표가 가리키는 방향에서, 화살의 출발점이 도착점을 참조하고 있다고 표시됩니다.
class X { X(Y *y) : y_ptr(y) { } void SetY(Y *y) { y_ptr = y; } void f( ) { y_ptr -> something(); } Y *y_ptr; };
2. Dependency ( 의존 ) 이란 .
Class Diagram에서 자주 등장하며, 어떤 클래스가 다른 클래스를 어떻게 의존하는지를 나타냅니다. 점선으로 나타내며, 점선의 방향은 의존하는 객체에서 의존당하는 객체로 향해집니다.
class X { ... void f1(Y y) {…; y.Foo(); } void f2(Y *y) {…; y->Foo(); } void f3(Y &y) {…; y.Foo(); } void f4() { Y y; y.Foo(); …} void f5() {…; Y::StaticFoo(); } ... };
3. Aggregation ( 집합 관계 ) 란.
위에서 언급한 Association을 좀 더 특수하게 나타낸 것으로 전체 파트와 부분 파트의 관계를 나타냅니다. ( 부분 집합의 의미? 는 제 생각입니다.) 다이아몬드 구조체와 화살표로 이뤄져 있는데, 다이아몬드 파트가 전체를 나타내는 구조체이며, 화살표는 Association과 마찬가지로, 부분을 나타내는 집합의 관계를 명시합니다.
class Window { public: //... private: vector itsShapes; };
4. Composition ( 합성 ) 이란.
위에서 언급한 Aggregation과 비슷하지만, 개념적으로 Aggregation 보다 강한 집합을 의미합니다.
// 첫번째 예시 class X { Y a; // composition Y b[10]; // composition }; // 두번째 예시 class X { X() { a = new Y[10]; } ~X() { delete a; } Y *a; }; // 세번째 예시 class X { vector a; };
5. Generalization ( 일반화 ) 란.
Generalization 은 부모 클래스와 자식 클래스 간의 상속 관계를 나타냅니다. 그래서 Inheritance 상속 이라고도 말하며, 상속의 부모 클래스에서 화살표 방향이 나있으며, 파생 클래스로 향하게 된다.
- 추가. Generalization 이란 파생 클래스가 주체가 되어, 파생 클래스를 부모 클래스로 Generalization 하는 것을 말하며, 그 반대는 Specialization이라 합니다.
Class Shape { void Draw(); void Erase(); }; class Circle : public Shape { ... }; class Ellipse : public Shape { ... };
6. Realization ( 실제화 ) 란.
Realization 은 인터페이스의 명세서에 있는 메서드를 오버 라이딩하여, 실제 기능으로 구현하는 것을 말합니다..!
글이 길어져서, 다음 글에서 마지막으로 Sequence Diagram을 살펴보며 마치겠습니다.
- 참조
- https://sourcemaking.com/uml/modeling-business-systems/internal-view/class-diagram
- https://en.wikipedia.org/wiki/Class_diagram
- https://www.nextree.co.kr/p6753/
반응형