OOP의 연관, 집계 및 구성 설명

UML (Unified Modeling Language)은 객체 지향 시스템을 모델링하기위한 사실상의 표준입니다. UML에는 연관, 집계, 구성, 종속성 및 상속의 다섯 가지 유형의 관계가 있습니다. 이 기사에서는 이러한 개념 중 처음 세 가지 개념에 대해 설명하고 나머지는 다른 블로그 게시물에 남겨 둡니다.

객체 지향 프로그래밍의 연관

연관은 다른 관련되지 않은 객체 간의 의미 상 약한 관계 (의미 적 종속성)입니다. 연결은 개체에 자체 수명이 있고 소유자가없는 둘 이상의 개체 간의 "사용"관계입니다.

예를 들어 의사와 환자의 관계를 상상해보십시오. 의사는 여러 환자와 연관 될 수 있습니다. 동시에 한 명의 환자가 여러 의사를 방문하여 치료 또는 상담을받을 수 있습니다. 이러한 각 개체에는 고유 한 수명주기가 있으며 "소유자"또는 상위가 없습니다. 연관 관계의 일부인 객체는 독립적으로 생성 및 소멸 될 수 있습니다.

UML에서 연관 관계는 단일 화살표로 표시됩니다. 연관 관계는 일대일, 일대 다 또는 다 대다 (카디널리티라고도 함)로 표시 될 수 있습니다. 기본적으로 둘 이상의 개체 간의 연결 관계는 한 개체가 다른 개체에게 메시지를 보낼 수 있도록 개체 간의 통신 경로 (링크라고도 함)를 나타냅니다. 다음 코드 스 니펫은 BlogAccount 및 BlogEntry라는 두 클래스가 서로 연관되는 방식을 보여줍니다.

공개 클래스 BlogAccount

   {

       개인 BlogEntry [] blogEntries;

       // BlogAccount 클래스의 다른 멤버

   }

공개 클래스 BlogEntry

   {

       Int32 blogId;

       문자열 캡션;

       문자열 텍스트;

       // BlogEntry 클래스의 다른 멤버

   }

객체 지향 프로그래밍의 집계

집계는 각 개체가 고유 한 수명주기를 갖지만 소유권도 존재하는 둘 이상의 개체 간의 특수한 연결 형식입니다. 집계는 일반적인 전체 / 부분 또는 부모 / 자녀 관계이지만 물리적 격리를 나타낼 수도 있고 나타내지 않을 수도 있습니다. 집계 관계의 필수 속성은 전체 또는 상위 (즉, 소유자)가 부분 또는 하위없이 존재할 수 있으며 그 반대의 경우도 가능하다는 것입니다.  

예를 들어, 직원은 조직의 하나 이상의 부서에 속할 수 있습니다. 그러나 직원의 부서가 삭제되면 직원 개체는 파괴되지 않고 계속 유지됩니다. 집계에 참여하는 개체 간의 관계는 상호적일 수 없습니다. 즉, 부서가 직원을 "소유"할 수 있지만 직원은 부서를 소유하지 않습니다. 다음 코드 예제에서 BlogAuthor 및 BlogAccount 클래스 간의 집계 관계가 분명합니다.

공개 클래스 BlogAuthor

   {

       private Int32 authorId;

       개인 문자열 firstName;

       개인 문자열 lastName;

       // BlogAuthor 클래스의 다른 멤버

   }

공개 클래스 BlogAccount

   {

       개인 BlogEntry [] blogEntries;

       // BlogAccount 클래스의 다른 멤버

   }

집계는 일반적으로 속이 빈 다이아몬드가있는 선을 사용하여 UML로 표시됩니다. 연관과 마찬가지로 집계에는 참여하는 개체 간의 일대일, 일대 다 또는 다 대다 관계가 포함될 수 있습니다. 일대 다 또는 다 대다 관계의 경우 중복 관계라고 말할 수 있습니다.

객체 지향 프로그래밍의 구성

구성은 전문화 된 형태의 집계입니다. 컴포지션에서 부모 개체가 파괴되면 자식 개체도 더 이상 존재하지 않습니다. 구성은 실제로 강력한 집계 유형이며 "죽음"관계라고도합니다. 예를 들어, 집은 하나 이상의 방으로 구성 될 수 있습니다. 집이 파괴되면 집의 일부인 모든 방도 파괴됩니다. 다음 코드 스 니펫은 House와 Room이라는 두 클래스 간의 구성 관계를 보여줍니다.

퍼블릭 클래스 하우스

{

   개인 방;

   선술집()

   {

       방 = 새 방 ();

   }

}

집계와 마찬가지로 컴포지션도 전체 / 일부 또는 상위 / 하위 관계입니다. 그러나 구성에서 부품 또는 하위의 수명주기는이를 소유 한 전체 또는 상위에 의해 제어됩니다. 이 제어는 직접적이거나 전이적일 수 있습니다. 즉, 부모는 자식의 생성 또는 파괴에 대한 직접적인 책임이 있거나 부모가 이미 생성 된 자식을 사용할 수 있습니다. 마찬가지로 부모 개체는 컨트롤을 다른 부모에게 위임하여 자식 개체를 삭제할 수 있습니다. 컴포지션은 다른 개체를 소유 한 개체의 끝에있는 단색 다이아몬드로 개체를 연결하는 선을 사용하여 UML로 표시됩니다.

연관성, 집계 및 구성 관계에 대한이 토론이이 세 가지 개념이 어떻게 다른지 이해하는 데 도움이 되었기를 바랍니다. 집계와 구성은 모두 연관의 하위 집합입니다. 집계와 구성 모두에서 한 클래스의 개체는 다른 클래스의 개체의 소유자가 될 수 있습니다. 그리고 집계와 구성 모두에서 하위 개체는 단일 상위 개체에 속합니다. 즉, 소유자가 하나만있을 수 있습니다.

마지막으로 집계 관계에서 상위 개체와 하위 개체의 수명주기는 독립적입니다. 컴포지션 관계에서 부모 개체의 죽음은 자식의 죽음을 의미하기도합니다.