주제

연관 페이지 맨 위

연관은 서로 다른 클래스의 객체 간 구조적 관계를 표시합니다. 또한 일정 지속 기간 동안 존재하는 둘 이상의 클래스 인스턴스 간의 연결을 표시합니다. 예를 들어, 조작의 지속 기간 동안에만 존재하는 일시적 링크와 비교해 보십시오. 후자의 상황은 링크가 특정한 제한된 컨텍스트에만 존재하며 대신 협업을 사용하여 모델링될 수 있습니다.

객체가 다른 객체에 대한 정보를 알고 있음을 표시하기 위해 연관을 사용할 수 있습니다. 종종 객체는 상호 작용(예: 서로에게 메시지 전송)할 수 있도록 서로에 대한 참조를 보유하고 있어야 합니다. 따라서 경우에 따라 연관은 순서 다이어그램 또는 의사소통 다이어그램의 상호 작용 패턴으로부터 나올 수 있습니다.

연관 이름 페이지 맨 위

대부분의 연관은 쌍으로 되어 있으며(정확하게 두 클래스 사이에 존재) 클래스 기호의 쌍을 연결하는 실선 경로로 표시됩니다. 연관이 이름을 가지거나 연관 역할이 이름을 가질 수 있습니다. 역할 이름이 자세한 정보를 전달하므로 선호됩니다. 역할 중 하나에만 이름을 지정할 수 있는 경우, 연관이 역할 이름이 연관된 객체에서 시작하는 단방향으로 예상되는 한 역할이 여전히 연관 이름보다 선호됩니다.

연관은 대개 역할에 적절히 이름을 지정하기 위한 충분한 정보가 존재하기 전애 분석 중에 이름 지정됩니다. 연관 이름이 사용될 때는 관계의 목적을 반영해야 하며 동사구이어야 합니다. 연관의 이름은 연관 경로 또는 인접한 위치에 배치됩니다.

ATM에서 현금 보관 서랍현금 자동 지급기에서 지급하는 돈을 공급합니다. 현금 자동 지급기에서 자금을 지급할 수 있으려면 현금 보관 서랍 객체에 대한 참조를 보유하고 있어야 합니다. 마찬가지로, 현금 보관 서랍에 자금이 떨어진 경우 현금 자동 지급기 객체에게 알려야 하므로 현금 보관 서랍현금 자동 지급기에 대한 참조를 보유해야 합니다. 연관은 이 참조를 모델링합니다.

연관 이름의 예

현금 자동 지급기현금 보관 서랍 간의 가치 제공이라는 이름의 연관.

연관 이름을 적절하지 못하게 선택하면 혼란과 오해를 일으킬 수 있습니다. 다음 예는 올바른 이름 지정과 잘못된 이름 지정을 설명합니다. 첫 번째 다이어그램에서는 연관 이름이 사용되고 구문에 맞지만(동사구 사용) 관계에 대한 많은 정보를 전달하지 않습니다. 두 번째 다이어그램에서는 역할 이름이 사용되며 이들 이름이 연관 관여의 특성에 대한 많은 정보를 전달합니다.

첨부 텍스트에 설명된 다이어그램

연관 및 역할 이름의 올바른 사용법과 잘못된 사용법 예

역할 페이지 맨 위

연관의 각 끝은 연관에서 클래스가 수행하는 작업을 지정하는 역할입니다. 각 역할은 이름을 가져야 하며 클래스에 상대되는 역할 이름은 고유해야 합니다. 역할 이름은 연관 객체에 관한 연관된 객체의 역할을 표시하는 명사여야 합니다. 교육 과정 섹션과의 연관에서 교사에 적합한 역할 이름은 예를 들어 강사일 수 있습니다. "있음" 및 "포함"과 같은 이름은 클래스 사이의 관계에 대한 정보를 추가하지 않으므로 사용하지 마십시오.

연관 이름 및 역할 이름의 사용은 모두 상호 배타적이므로 연관 이름 역할 이름 둘 다를 사용할 수 없습니다. 역할에 적절한 이름을 지정하기 위한 충분한 정보가 없는 경우(분석에서 흔히 발생하는 경우이며, 설계 시 역할 이름을 항상 사용해야 함)를 제외하고는 역할 이름이 연관 이름보다 선호됩니다. 올바른 역할 이름을 사용하지 않으면 불완전하거나 잘못 형성된 모델이 생성될 수 있습니다.

역할 이름은 연관 선의 끝에 놓여집니다.

주문 입력 시스템의 클래스 간의 관계를 생각해 보십시오. 고객은 두 개의 다른 유형의 주소를 가질 수 있습니다. 한 주소로는 청구서가 전송되고 다른 여러 개의 주소로 주문이 전송될 수 있습니다. 결과적으로, 아래와 같이 고객과 주소 사이에는 두 개의 연관이 있습니다. 연관에는 연관된 주소가 고객에 대해 수행하는 역할로 레이블 표시됩니다.

연관의 예

역할 이름과 다양성을 모두 표시하는 고객, 주소주문 사이의 연관

다양성 페이지 맨 위

각 역할에 대해 클래스의 다양성(다른 클래스의 한 객체와 연관될 수 있는 클래스의 객체 수)을 지정할 수 있습니다. 다양성은 역할에 대한 텍스트 표현식으로 표시됩니다. 표현식은 쉼표로 분리된 정수 범위 목록입니다. 범위는 정수(하한), 두 개의 점, 정수(상한)로 표시됩니다. 단일 정수는 올바른 범위이며 기호 '*'는 "다수"를 나타냅니다. 즉 객체 수에 제한이 없음을 나타냅니다. '*' 기호 자체는 '0..*'과 동일합니다. 즉 없음을 포함한 모든 숫자이며 기본값입니다. 선택적 스칼라 역할은 다양성 0..1입니다.

이전 예에서 다양성은 주문과 고객, 고객과 주소 사이의 연관에 대해 표시되었습니다. 이 다이어그램을 해석하면, 주문은 연관된 고객을 가져야 하지만(고객 끝에서 다양성이 1..1) 고객은 주문을 갖지 않을 수 있습니다(주문 끝에서 다양성이 0..* ). 또한 고객은 하나의 청구 주소를 갖지만 하나 이상의 운송 주소를 가집니다. 표기법의 혼란을 줄이기 위해 다양성이 생략된 경우 다양성은 1..1로 간주될 수 있습니다.

검색력 페이지 맨 위

역할에 대한 검색력 등록 정보는 연관을 사용하여 연관 클래스에서 대상 클래스로 탐색할 수 있음을 나타냅니다. 이는 직접 객체 참조, 연관된 배열, 해시 테이블 또는 한 객체가 다른 객체를 참조할 수 있게 하는 기타 구현 기술 등 여러 가지 방법으로 구현될 수 있습니다. 검색력은 열린 화살표로 표시되며 대상 클래스(탐색되는 클래스) 옆에 있는 연관 선의 대상 끝에 놓여집니다. 검색력 등록 정보의 기본값은 입니다.

주문 입력 예에서 주문고객 간의 연관은 양방향으로 탐색할 수 있습니다. 주문주문고객을 알아야 하고 고객은 고객이 주문한 주문을 알아야 합니다. 화살표 머리가 표시되지 않을 때 연관은 양방향으로 탐색 가능한 것으로 간주됩니다.

고객주소 사이의 연관의 경우, 고객주소를 알아야 하지만 주소는 어떤 고객(또는 여러 항목이 주소를 가지므로 다른 클래스)이 해당 주소와 연관되는지에 대해 알지 못합니다. 결과적으로, 연관의 고객 끝의 검색력 등록 정보가 꺼짐으로써 다음과 같은 다이어그램이 생성됩니다.

연관에 대한 검색력의 예

연관의 검색력을 표시하는 갱신된 주문 입력 시스템 클래스.

자체 연관 페이지 맨 위

때때로 클래스는 클래스 자체에 대한 연관을 가집니다. 이는 꼭 해당 클래스의 인스턴스가 그 자체에 대한 연관이 있다는 것을 의미하지 않습니다. 대개의 경우 클래스의 한 인스턴스가 동일한 클래스의 다른 인스턴스에 대한 연관이 있다는 것을 의미합니다. 자체 연관의 경우, 연관에 대한 목적을 구별하기 위해 역할 이름이 필요합니다.

다음과 같이 직원 클래스를 포함하는 자체 연관을 생각해 보십시오.

자체 연관의 예

이 경우, 직원은 다른 직원에 대해 연관을 가질 수 있습니다. 그러한 경우, 해당 직원은 관리자이며 다른 직원은 이 관리자의 직원 구성원입니다. 직원이 본인의 관리자를 알고 관리자가 본인의 직원을 알기 때문에 연관은 양방향으로 탐색할 수 있습니다.

다중 연관 페이지 맨 위

클래스 사이에 두 개의 연관을 그리면 두 번 연관됩니다. 주어진 객체는 각 연관을 통해 다른 객체로 링크될 수 있습니다. 각 연관은 독립적이며 역할 이름으로 구별됩니다. 위에 표시된 대로 고객은 각각 다른 역할 이름을 가진 동일한 클래스의 서로 다른 인스턴스에 대해 연관을 가질 수 있습니다.

역할 순서화 페이지 맨 위

연관의 다양성이 둘 이상일 때 연관된 인스턴스를 순서화할 수 있습니다. 역할에서 순서화됨 등록 정보는 연관에 관여하는 인스턴스가 순서화됨을 나타냅니다. 기본적으로 인스턴스는 순서화되어 있지 않습니다. 모델은 순서화가 유지보수되는 방법을 지정하지 않습니다. 순서화된 연관을 갱신하는 조작이 갱신된 요소가 삽입되는 위치를 지정해야 합니다.

링크 페이지 맨 위

연관의 개별 인스턴스를 링크라고 합니다. 따라서 링크는 인스턴스 사이의 관계입니다. 메시지가 링크에서 전송될 수 있으며 링크는 객체 사이의 참조 및 집합을 표시할 수 있습니다. 자세한 정보는 가이드라인: 의사소통 다이어그램을 참조하십시오.

연관 클래스 페이지 맨 위

연관 클래스는 클래스 등록 정보(속성, 조작 및 연관)를 가지고 있는 연관입니다. 이는 연관 경로에서 연관에 대한 속성, 조작 및 연관을 보유하고 있는 클래스 기호까지 단선을 그려서 표시할 수 있습니다. 속성, 조작 및 연관은 원래 연관 자체에 적용됩니다. 연관의 각 링크는 표시된 등록 정보를 가집니다. 연관 클래스의 가장 일반적인 사용은 다:다 관계의 조정입니다(아래 예 참조). 대체로 연관과 클래스의 이름은 동일해야 하지만 필요한 경우 서로 다른 이름을 사용할 수 있습니다. 퇴보 연관 클래스에는 연관에 대한 속성만 들어 있습니다. 이 경우 연관 클래스 이름을 생략하여 분리를 중요하지 않게 다룰 수 있습니다.

이전에 나온 직원 예를 확장하여 직원(담당자)이 다른 직원(관리자)을 위해 일하는 경우를 생각해 보십시오. 관리자는 특정 기간 동안의 담당자의 성과를 반영하여 담당자에 대한 정기적 평가를 수행합니다.

평가는 관리자 또는 담당자만의 속성이 될 수 없습니다. 그러나 아래와 같이 그 정보를 연관 자체에 연관시킬 수 있습니다.

연관 클래스의 예

평가 연관 클래스는 연관 자체에 관련된 정보를 캡처합니다.

규정된 연관 페이지 맨 위

규정자는 다른 인스턴스에 연관된 인스턴스 세트를 좀 더 제한하고 정의하는 데 사용됩니다. 객체 및 규정자 값은 연관에서 고유한 객체 세트를 식별하고 복합 키를 형성합니다. 일반적으로 자격은 상반되는 역할의 다양성을 줄입니다. 순 다양성은 첫 번째 클래스와 연관된 관련 클래스의 인스턴스 수와 주어진 규정자 값을 표시합니다. 규정자는 규정하는 클래스에 첨부된 연관의 끝에 작은 상자로 표시됩니다. 규정자는 연관의 일부로 포함되며 클래스에 포함되지 않습니다. 규정자는 다중 규정자 값을 가질 수 있습니다. 자격은 전체 값 목록을 기반으로 합니다. 규정된 연관은 연관 속성의 변형입니다.

다음과 같은 라인 항목제품 사이에 있는 연관의 세분화를 생각해 보십시오. 라인 항목은 주문된 제품에 대해 연관을 가집니다. 각 라인 항목은 하나의 제품만 참조하는 반면에 제품은 많은 라인 항목에 대해 주문될 수 있습니다. 제품 코드 규정자와의 연관을 규정함으로써 각 제품이 고유 제품 코드를 가지고 있으며 라인 항목이 이 제품 코드를 사용하여 제품과 연관되었다는 것을 추가로 표시합니다.

규정된 연관

라인 항목제품 간의 연관은 제품 코드 규정자를 가집니다.

N-ary 연관 페이지 맨 위

N-ary 연관은 세 개 이상의 클래스 사이에 있는 연관으로, 단일 클래스가 두 번 이상 나타날 수 있습니다. N-ary 연관은 관여하는 각 클래스에 대한 하나의 연관 경로를 가진 큰 다이아몬드로 표시됩니다. 이는 연관에 대한 전통적인 엔티티-관계 모델 기호입니다. 쌍으로 된 형식은 실제 모델에서 거대한 연관이 되므로 보다 간결하게 표시하기 위해 다이아몬드 없이 작성됩니다. N-ary 연관은 거의 드물며 클래스로 승격하여 모델링할 수도 있습니다. N-ary 연관은 연관 클래스를 가질 수도 있습니다. 이는 다이아몬드에서 클래스 기호까지 단선을 그려서 표시합니다. 역할은 역할 이름을 가질 수 있지만 다양성은 좀 더 복잡하므로 후보 키를 나열함으로써 최적으로 지정됩니다. 제공되는 경우, 다양성은 다른 N-1 객체의 해당 튜플에 해당하는 인스턴스 수를 나타냅니다. 대부분의 N-ary 연관 사용은 규정된 연관 또는 연관 클래스를 사용하여 제거할 수 있습니다. 해당 관련 객체의 튜플에 대해 하나만 링크시킬 수 있는 제한조건이 없더라도 일반 클래스로 바꿀 수 있습니다.



Rational Unified Process   2003.06.15