Corgi Dog Bark

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • UML 뜯어보기 ( 2 ) Class 및 Sequence Diagram
    카테고리 없음 2022. 5. 9. 22:29
    반응형

     

    [ UML에 관한 전편 게시물 ] https://guru.tistory.com/109

     

    UML 뜯어보기 ( 1 )

    UML 이란 ? UML 이란 Unified Modeling Language 의 약자로 1997년 OMG 에서 표준으로 채택한 통합모델링 언어입니다. 즉 모델을 만드는 표준 언어이며, 시스템을 디자인 하거나 보여줄때, 표준으로 사용됩니

    guru.tistory.com

     

    Class Diagram ( 클래스 다이어그램 )

    Class Diagram을 설계하기 전에 , "왜 사용할까 ?" 라는 의문이 생긴다면, 클래스 다이어그램은 객체들 간의 관계, 속성, 그리고 함수들을 정의 함으로써, 구조적인 형태를 미리 만들어 볼 수 있으며, 콘셉트의 형태를 자리 잡을 수 있다는 장점이 있습니다.

    Class Diagram 으로 나타낸 , 상속 구조 예시.

    그럼 Class Diagram 을 만들기 전에 어떤 구성요소가 있는지 알아봅시다. Class Diagram 은 클래스 , 스테레오 타입, 클래스 간의 관계 등으로 만들 수 있습니다. 그럼 각각에 대해 살펴봅시다.

     

     

    2-1. Class Diagram의 Class

    쉽게 말해, Class 의 구성이 어떻게 되어있냐를 나타내는 항목으로, 보통 클래스의 이름, 속성, 기능들을 표시하게 됩니다. 이때, 각 클래스 멤버에 대해서 Visibility를 정해줄 수 있는데 

    1. + : public 멤버
    2. - : private 멤버
    3. # : Protected 멤버
    4. ~ : 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 를 나타내는지를 주로 적습니다. 대략 밑의 방식으로 적습니다.

    https://www.researchgate.net/figure/Association-Level-UML-Stereotypes-for-Jack_tbl2_3913842

     

     

    2-3. Class Diagram 의 Relationships 

    마지막으로 살펴볼 것은 Relationship 으로써, 다른 클래스와 객체들 사이의 관계를 나타내게 됩니다. 총 7가지의 종류가 존재하고, 

     

    1. Generalization (일반화)
    2. Realization (실제화)
    3. Dependency (의존화)
    4. Association (연관화) 
    5. Aggregation (집합)
    6. Composition (합성) 

    과 같이 존재하게 된다.

    UML 의 Relationship 구성 7가지.

     

    1. Assocatiation ( 연관 ) 이란 . 

    다른 객체의 참조를 가지고 있는 클래스를 나타내면서, 화살표가 가리키는 방향에서, 화살의 출발점이 도착점을 참조하고 있다고 표시됩니다.

    x 가 Y 를 Association.

    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에서 자주 등장하며, 어떤 클래스가 다른 클래스를 어떻게 의존하는지를 나타냅니다. 점선으로 나타내며, 점선의 방향은 의존하는 객체에서 의존당하는 객체로 향해집니다.

    X 의 Y 의존.

    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과 마찬가지로, 부분을 나타내는 집합의 관계를 명시합니다.

     

    Window 에서 Shape 의로의 Aggregation.

    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이라 합니다.

    Circle 과 Ellipse : 파생클래스, Shape : 슈퍼 클래스

    Class Shape {
    	void Draw();
        void Erase();
    };
    
    class Circle : public Shape {
    	...
    };
    
    class Ellipse : public Shape {
    	...
    };

     

    6. Realization  ( 실제화 ) 란. 

    Realization 은 인터페이스의 명세서에 있는 메서드를 오버 라이딩하여, 실제 기능으로 구현하는 것을 말합니다..!

     

     

    글이 길어져서, 다음 글에서 마지막으로 Sequence Diagram을 살펴보며 마치겠습니다.

     

     

    - 참조 

    1. https://sourcemaking.com/uml/modeling-business-systems/internal-view/class-diagram 
    2. https://en.wikipedia.org/wiki/Class_diagram 
    3. https://www.nextree.co.kr/p6753/

     

     

    반응형

    댓글

Designed by Tistory.