본문 바로가기
Tools/StarUML

[StarUML] 클래스 다이어그램이란?(2) - 관계 유형

by 썸머워즈 2019. 9. 18.
반응형

출처 : https://blog.naver.com/he1000/220722818923


1. Association 관계

  •  1. 정의와 특징
    - Association은 두 클래스간 일반적인 협력 관계가 있을 경우 정의됩니다.
    - Association은 두 클래스의 객체들 사이에 존재하는 공통의 성질 및 의미를 갖는 링크들의 집합에 대한 표현입니다
    - 두 클래스가 서로 Association관계가 있다면 한쪽 객체에서 다른 객체를 참조할 수 있음을 의미합니다
    - Association은 향후 다른 클래스에 대한 포인터나 레퍼런스로 구현됩니다

  •   2. 표기법
       2-1 화살표 없는 실선(양방향 관계)

 

           - 제품과 공급자는 Association관계
           - 
보통 분석단계에서 정의하는 형태
           - 
아직 참조방향이 결정되지 않은
 의미적인 관련성만을 표현한 형태

         2-2 한쪽 화살표를 가진 실선으로 표현(단방향-Navigation 관계)

           - 화살표는 참조의 방향을 나타냄
           - 공급자는 제품을 참조할 수 있지만그 반대는 참조할 수 없음을 나타냄 (Navigation)
           - 
참조방향을 정의하는 것은 모델링 과정에서 진전함을 의미
           - 
클래스간 참조 방향을 정의하는 것이 구현 과정에서 편리

         2-3 여러가지 장식(adornment)이 부가된 상세한 표현

           - Association관계에 대해 표현할 수 있는 모든 것을 표현한 형식
           - 
실무에서는 모든 클래스 다이어그램에서 위와 같은 상세한 표기를 전부 적용하지는 않음
           - 
일반적으로 역할 명 > 관계 명 > 관계 수의 순서로 생략하는 비율이 높음
           - 
관계 수는 가른 두 종류의 부가표현보다 훨씬 의미가 중요하기 때문에상세화가 진행되면서 반드시 정의하고 있음

2. Aggregation 관계

  • 1. 정의 및 특징
    - Aggregation 관계는 Association관계의 일종입니다
    - Aggregation은 두 클래스간에 "전체-부분(whole-part)"의 관계가 있을 경우 정의됩니다
    - Aggregation 관계는 클래스 각각이 독립적인 생명주기를 가집니다. , 전체에 해당되는 클래스가 소멸되더라도 부분에 해당되는 클래스는 소멸하지 않고 계속 존재할 수 있습니다

  • 2. 표기법
    - 속이 빈 마름모가 붙은 실선

           - 마름모가 붙은 쪽이 "전체" 클래스반대쪽은 "부분" 클래스
           - 
왼쪽의 예는 자동차는 1개의  엔진과 1개의 변속기와 4개의 바퀴로 구성된다는 의미 자동차가 소멸되더라도 부품으로서의 엔진 변속기,바퀴는 소멸되지 않음

3. Composition 관계

  • 1. 정의와 특징
    - Composition 관계 역시 Association 관계의 일종입니다
    - Composition 관계는 Aggregation 관계와 유사하게 두 클래스 간에 "부분-전체" (part-of)의 관계가 있을 경우 정의됩니다
    - 그러나 Composition 관계는 부분의 생명주기가 전체의 생명주기에 종속적인 관계입니다. , 전체가 생성될 때 부분도 생성되고, 전체가 소멸될 때 부분도 함께 소멸 합니다.

  • 2. 표기법
    - 속이 찬 마름모가 붙은 실선

           - Aggregation관계와 "전체-부분" 의미는 동일
           - 이 관계는 생명주기가 서로 같은 관계
           - 
왼쪽 예에서 고객등록 윈도우가 생성될 때 저장버튼,취소버튼도 생성됨

           - 고객등록 윈도우가 소멸될 때 저장버튼, 취소 버튼도 소멸. , 부분의 생명주기는 전체의 생명주기에 종속적

4. Generalization 관계

  • 1. 정의와 특징
    - generalization 관계는 두 클래스는 일반화-특수화 관계가 있을 때 정의합니다
    - , 보다 보편적인 것과 보다 구체적인 것 사이의 관계입니다.(is-a 관계라고도합니다)
    - generalization관계는 상속(inheritance) 특성을 가집니다

  • 2. 표기법
    - 삼각형 화살표가 붙은 실선

           - 결재 클래스는 보다 일반적인 클래스 (Generalized Class)이고, 금결재카드결재, e-cash결재는 보다 특수화(Specialized Class)된 관계임
           - 결재 클래스의 속성과 오퍼레이션은 공통적이고 일반적인 것으로 정의되고하위의 3개의 클래스는 자신만의 특수한 속성과 오퍼레이션을 정의함
           - 일반화된 속성, 오퍼레이션과 동일한 것을 하위의 클래스가 정의해야할 필요가 있더라도 이를 정의하지 않음. (상속되어 따로 정의하지 않더라도 일반 클래스의 것을 그대로 사용할 수 있기 때문)

5. Dependency 관계

  • 1. 정의와 특징
    - 한 쪽 클래스가 실행 도중 다른 쪽 클래스의 실행을 요청하는 경우에 정의합니다
    - Dependency 관계는 클래스간의 사용 관계를 표현합니다
    - Association 관계에 비해 훨씬 종속적입니다
    (Association은 존재하는 단순히 다른 객체를 참조하고 실행을 의뢰하지만,
    Dependency 
    관계는 다른 객체를 생성하고,소멸시키는 등 보다 종속적인 관계에
    대해 정의합니다.)

  • 2. 표기법
    - 화살표 붙은 점선

           - TransactionManager 클래스와 Course 클래스 사이에 Dependency 관계가 존재
           - 
위의 예는 TransactionManager 클래스의 오퍼레이션에서 Course 클래스가 파라메터로 사용됨


           [Tip] Dependency 관계로 정의되는 사례
           클래스 사이에 Dependency 관계가 정의되는 경우는 다음과 같습니다.
           (A 
클래스와 B 클래스 사이에 A-->B Dependency 관계를 가정합니다.)

           - B 객체가 A 객체의 오퍼레이션에서 파라메터로 사용될 경우
           - B 객체가 A 객체의 오퍼레이션에서 지역 변수(local variable)로 선언될 경우
           - B 객체가 전역 객체일 경우 (속성과 오퍼레이션 모두 public 접근선언)

6. 클래스 식별 방법

  • 6-1 부적합한 것을 탈락 시키는 방법
    클래스를 식별하는 것은 객체지향 패러다임에 익숙하지 않은 초보자에게 쉬운 일은
    아닙니다. 클래스를 식별하는 쉽고 확실한 방법은 경험이 가져다 주는 직관입니다.
    그러나 초보자에게는 막막하기만 합니다.

    가장 효과적인 방법은 후보 클래스에서 부적합한 것을 탈락시키는 방법입니다.
    초보자가 사용할 수 있는 적절한 방법은 클래스가 될 수 있는 후보 클래스를 가능한 한
    많이 나열한 후 부적합한 것들을 제거해 나가는 방법입니다. 후보 클래스를 나열하기
    위해서는 문제영역을 잘 분석하여 이해하는 것이 선행되어야 합니다.

    클래스를 식별하기 위해서 다음 순서로 진행합니다.

  • 6-2 식별 사례
    다음은 SW 시스템에 대한 문제영역 기술서입니다. 아래의 기술서를 읽어 보고 클래스를
    식별해 봅시다


    "An automatic teller machine accepts a cash card, interacts with the user,
    communicates with the central system to carry out the transaction
    , dispenses cash, and prints receipts. The system requires appropriate
    record keeping and security provisions. The system must handle concurrent
    accesses to the same account correctly. The banks will provide their own
    software for their own computers; you are to design the software for the
    ATMs and the network. The cost of the shared system will be apportioned to
    the banks according to the number of customers with cash cards
    ."

    1. 후보클래스 나열 (명사)
     위 문제 기술서를 토대로 찾아낸 후보 클래스는 다음과 같습니다

    - Software , Banking Network , cashier
    - ATM , Bank , Bank Computer
    - Account, Transaction, Account Data
    - Central Computer, User, Cash, Receipt
    - System , Record Keeping , Security Provision
    - Access , Cost , Customer

    2. 부적합한 것을 탈락 시킨다
    - 문제영역과 상관없는 것 :
    Banking Network , Recording Keeping, System, Security Provision
    - 속성에 해당하는 것 :
    Receipt , Cash , Account Data
    - 모호한 것 :
    Cost

    - 중복된 것 :
    User

    3. 클래스로 채택된 것
    - Account , ATM , Bank
    - Bank Computer, Cash Card , Cashier
    - Central Computer, Customer , Transaction

7. 관계수와 특별한 클래스 간 관계

  • 7-1 관계 수 (Multiplicity)
    1 정의
    - 클래스와 클래스가 인스턴스화 되어 연결 관계를 맺을 때, 관계에 참여하는 객체의 개수를 정의한 것입니다

    - 특정 클래스의 인스턴스에 대해 Association 관계에 있는 다른 클래스의 인스턴스가 몇 개 관련되어 있는가를 의미합니다

    2. 관계 수의 유형
    - Many (* 또는 n )
    클래스 B의 인스턴스 하나에 A 인스턴스 여러 개와 관계

       - Exactly five(5)
       클래스 B의 인스턴스 하나에 A 인스턴스 다섯 개와 관계

       - Zero or more (0..n)
       클래스 B의 인스턴스 하나에 관계된 A 인스턴스가
       없거나 여러 개

       - One to Ten (1..10)
       클래스 B의 인스턴스 하나에 관계된 A 인스턴스가 1개보다 많고 10개 보다 적음

       - Exactly two, three or five(2,3,5)
       클래스 B의 인스턴스 하나에 관계된 A 인스턴스가 2개 혹은 3개 혹은 5개임

  • 7-2. 특별한 클래스간 관계
    1. 다중 연관 관계 (Multiple Association)
    두 클래스간에 두 가지 이상의 Association이 존재하는 경우를 말합니다. 이 경우
    Association
    에는 반드시 관계 명이 정의되어야 합니다. 일반적으로 다중
    연관관계는 바람직하지 않으며, 클래스를 분할하는 방식으로 이를 해소하는 것이
    좋습니다.

       - 사람과 교과목 사이에는 수강하다(사람이 수강생일 경우)와 강의하다(사람이 교수인 경우)의 두 가지 Association이 존재할 수 있습니다.

       2. 재귀 연관 관계 (Reflexive Association)

       같은 클래스끼리 맺어지는 관계가 존재합니다.

       - 과목에는 선수과목이라는 과목이 0개 혹은 다수 개가 존재합니다.

       3. Qualifier 연관관계
       관계 수가 복잡할 때 사용합니다. (one-to-many, many-to-many)
       Qualifier
       - 속성 혹은 속성의 집합이며 이들 값으로 Association에서 객체의 집합을
         
구별하는 목적으로 쓰입니다.
       - Association
에서 객체를 분리하기 위한 Key의 일종으로 간주되기도 합니다.
       - 
복잡한 관계 수를 간략하게 하기 위해 정의합니다.

       한번의 주문(주문 클래스)에는 여러 가지의 주문상품 Item(주문Item)이 있을 수
       있습니다. 원래는 주문에 대한 주문 Item의 관계는 0..n 이었지만, Qaulifier
       "
제품"이 정의된 후의 관계는 0..1로 되었습니다. 왜냐하면 어떤 주문에서 특정
       제품에 대한 주문 Item은 없거나 하나이기 때문입니다.


       4. 연관 클래스(Association Class)
       - 연관 클래스는 Many-to-many Association 관계에서 도출됩니다.
       - Association 관계가 고유의 속성이나 오퍼레이션이 필요할 경우에 정의됩니다
       - Association 관계당 하나의 연관 클래스만이 도출 가능합니다

       첫 번째 모델에서 기술수준이라는 속성을 추가하고 할 때, 그 대상은 사람
       클래스도 부적절하고 기술 클래스도 부적절합니다. Association에 추가해야
       하는데, 이렇게 해서 연관 클래스가 새롭게 정의되었습니다


출처 : https://blog.naver.com/he1000/220722818923 

 

반응형


댓글

TOP