집계는 모델 요소 사이의 구성 관계를 모델링하는 데 사용합니다. 컴포지트 관계에 대한 많은 예제가 있습니다. 도서관에는 책이 포함되고 회사에서 부서는 직원으로
구성되며 컴퓨터는 많은 장치로 구성됩니다. 이와 같은 항목을 모델링하려면 집계(부서)에는 해당 구성 파트(직원)와의 집계 연관이 설정되어야 합니다.
집계를 표시하기 위해 전체 집계 옆에 있는 연관 경로 끝에 속이 빈 다이아몬드가 첨부됩니다.
예제
이 예제에서 Customer는 Address를 포함합니다. 두 개의 클래스가 더 큰 전체의 파트를 표시하므로 집계를 사용합니다. 또한 별도의 클래스로 Address 모델을
선택합니다. 기타 많은 항목도 주소를 포함하기 때문입니다.
집계 오브젝트는 기타 오브젝트를 함께 보유할 수 있습니다.
다중성이 집계에 설정된 것보다 더 큰 집계 관계를 공유라고 합니다. 집계를 제거해도 반드시 해당 파트가 제거되는 것은 아닙니다. 내재적으로 공유 집계는 많은 루트를 포함하는 트리 또는 그래프를
구성합니다. 공유 집계는 두 클래스 사이의 관계가 강력한 경우 사용됩니다. 동일한 인스턴스가 두 개의 서로 다른 집계에 참여할 수 있기 때문입니다.
예제
한 사람이 재택 근무 비즈니스를 하는 경우를 고려하십시오. 사람과 비즈니스 모두 주소가 있습니다. 실제로 동일한 주소입니다. 주소는 사람 및 비즈니스 모두에 필요한 파트입니다. 그러나 비즈니스가
없어져도 사람은 동일한 주소에 남아 있습니다.
또한 이 경우 공유 집계로 시작하여 나중에 비공유 집계로 변환될 수 있음에 유의하십시오. 재택 근무 비즈니스가 성장 및 번영하여 실제로 다른 지역으로 이동할 수 있습니다. 이 경우 사람과 비즈니스는 더 이상 동일한
주소를 공유하지 않습니다. 결과적으로 집계는 더 이상 공유되지 않습니다.
공유 집계 예제
컴포지션은 소유권이 강력한 집계 양식으로, 파트의 수명이 집계와 일치합니다. 집계 종료의 다중성(예: Order)은 하나를 초과할 수 없습니다(즉, 공유 불가능). 또한 집계는 한 번
설정되면 변경할 수 없고 해당 링크도 변경할 수 없습니다. 내재적으로 컴포지트 집계는 집계가 루트이고 파트가 "분기"인 파트 "트리"를 구성합니다.
컴포지트 집계는 집계 및 파트 사이의 내부 종속성 관계가 강력한 경우(파트가 없어서 집계 정의가 불완전한 경우) "일반" 집계에서 사용되어야 합니다. 아래 표시된 예제에서 주문된 항목(즉, Line
Items)이 없어도 Order를 포함할 수 있습니다. 일부 경우 이 내부 종속성은 이 예제의 경우처럼 분석과 같이 초반에 식별될 수 있습니다. 그러나 대부분의 경우 해당 결정이 확실해질
때까지는 식별되지 않습니다.
아래와 같이 집계를 표시하기 위해 연관 경로 끝에 속이 채워진 다이아몬드가 첨부됩니다.
컴포지트 집계 예제
예제
이 예제에서 Customer Interface는 여러 기타 클래스로 구성됩니다. 이 예제에서 집계의 다중성은 아직 지정되지 않았습니다.
Customer Interface 오브젝트는 여기에 속해 있는 Display, Receipt Printer, KeyPad 및 Speaker 오브젝트를 알고
있습니다.
클래스 특성은 클래스가 알고 있는 정보를 의미합니다. 위에 표시된 Customer 클래스와 같이, 고객의 Address를 클래스의 속성 세트 또는 표시한 것처럼 클래스로 모델링하도록 선택할
수 있습니다. 클래스 및 집계 관계를 사용할 것인지 또는 속성 세트를 사용할 것인지는 다음에 따라 결정됩니다.
-
여러 오브젝트에서 참조할 수 있도록 '특성'에 독립된 ID가 필요합니까? 필요한 경우 클래스 및 집계를 사용하십시오.
-
여러 클래스에서 동일한 '특성'을 포함해야 합니까? 필요한 경우 클래스 및 집계를 사용하십시오.
-
'특성'이 복잡한 구조 및 고유한 특성을 포함합니까? 필요한 경우 하나 이상의 클래스 및 집계를 사용하십시오.
-
그렇지 않으면 속성을 사용하십시오.
예제
현금 자동 인출기(ATM)에서 시스템이 현재 고객 및 해당 PIN을 추적해야 합니다. Customer Interface가 이 작업을 책임진다고 가정해 보십시오. 이 정보는 클래스의
"특성"으로 간주될 수 있습니다. 다음과 같이 별도의 클래스를 사용하여 이 작업을 수행할 수 있습니다.
집계를 사용하여 모델링한 오브젝트 특성
Customer Interface에서 속성을 사용하여 현재 고객 및 해당 PIN을 추적하는 대안은 다음과 같이 모델링됩니다.
속성을 사용하여 모델링한 오브젝트 특성
별도의 클래스에 대한 집계 연관을 사용하는지 또는 속성을 사용하는지에 대한 결정은 표시되는 개념 사이의 결합 정도에 따라 결정됩니다. 모델링 중인 개념이 긴밀히 연결된 경우 속성을 사용합니다. 개념이 독립적으로
변경될 가능성이 높은 경우 집계를 사용합니다.
집계는 클래스 사이에 컴포지트 관계가 있는 경우, 하나의 클래스가 다른 클래스로 구성된 경우, "파트"가 전체 컨텍스트 외부에서 불완전한 경우에만 사용해야 합니다. 주문의 경우를 고려하십시오. "비어
있고" 구성된 항목이 없는 주문을 포함할 수는 없습니다. 모든 집계에서도 동일하게 적용됩니다. 부서에는 직원이, 가족에는 가족 구성원이 있어야 합니다.
클래스가 기타 클래스에서 제공하는 컨텍스트 외부의 독립적인 ID를 포함할 수 있는 경우 더 큰 전체 파트가 아니면 연관 관계를 사용해야 합니다. 또한 불확실한 경우 연관이 더 적합합니다. 일반적으로 연관은
분명합니다. 명확히 하는 데 도움이 되는 경우에만 집계를 선택합니다. 모델링 노력의 성공에는 큰 영향을 주지 않습니다.
때때로 자체 집계되는 클래스가 있습니다. 해당 클래스의 인스턴스가 자체로 구성되었다는 의미는 아닙니다. 클래스의 인스턴스가 동일한 클래스의 다른 인스턴스로 구성된 집계임을 의미합니다. 자체 집계에서 연관을 위해
구별하는 경우 역할 이름이 중요합니다.
예제
다음과 같은 Product 클래스와 관련된 자체 집계를 고려하십시오.
이 경우 제품은 기타 제품으로 구성될 수 있습니다. 이때 집계된 제품은 하위 제품이라고 합니다. 연관은 집계에서 하위 제품으로만 탐색 가능합니다. 즉, 하위 제품은 많은 제품의 파트일 수 있으므로 어떤 제품의
파트에 속하는지 확인할 수 없습니다.
|