일부 경우 오브젝트는 다른 오브젝트에서 발생하는 특정 이벤트에 종속됩니다. 이벤트가 경계 또는 제어 오브젝트 내에서 발생하는 경우 이 오브젝트는 단순히 다른 오브젝트에게 발생한 사항에 대해 알려줍니다. 그러나
엔티티 오브젝트에서 이벤트가 발생하면 상황이 다소 다릅니다. 특별히 요청하지 않으면 엔티티 오브젝트는 다른 오브젝트에게 발생한 상황을 알릴 수 없습니다.
예제
이체를 통해 은행 계정에서 현금을 인출할 수 있도록 시스템이 모델링되었다고 가정해 보십시오. 인출 시도로 계정 잔액이 마이너스가 되면 고객에게 이 사실을 즉시 알려야 합니다. 엔티티 오브젝트로 모델링된 계정은
고객에게 이를 통보하는 것에 대해 신경 쓰지 않아야 합니다. 대신에 경계 오브젝트가 고객에게 알려야 합니다.
위의 예제에서 경계 오브젝트는 "대기 중인 이벤트가 발생했을까?"란 의문을 엔티티 오브젝트에 반복적으로 제기해야 합니다. 상황을 보다 명확히 하고 디자인 단계까지 구현 세부사항을 연기하기 위해 이를 표현하는 데
사용되는 특수 연관 즉, 등록 연관이 있습니다.
임의의 유형의 오브젝트를 엔티티 오브젝트와 연관시키는 등록 연관은 엔티티 오브젝트에서 특정 이벤트가 발생할 때 연관된 오브젝트에 이를 알림을 표현합니다. 이 연관은 연관 필요성을 유발하는 엔티티 오브젝트의 수동적
특성이므로 엔티티 오브젝트를 연관시키는 데에만 이를 사용할 것을 권장합니다. 반면에 인터페이스 및 제어 오브젝트는 모두 통신을 시작하도록 허용됩니다. 따라서 이들은 "등록"할 필요가 없지만 책임을 다른 방식으로
수행할 수 있습니다.
등록 연관은 임의의 유형의 오브젝트를 엔티티 오브젝트와 연관시킵니다. 연관된 엔티티 오브젝트에서 특정 이벤트가 발생할 때 연관 오브젝트에 이를 알립니다.
연관의 방향은 등록 오브젝트만이 두 오브젝트 사이의 관계를 인식한다는 사실을 표시함에 유의하십시오. 등록 설명은 전적으로 등록 오브젝트 내에 있습니다. 연관된 엔티티 오브젝트는 기타 오브젝트가 타스크에 관심이 있을
수 있다는 사실을 고려하지 않은 채 일반적인 방식으로 차례로 정의됩니다. 이는 등록 중인 오브젝트를 변경하지 않고도 등록 오브젝트를 모델에(서) 추가하거나 제거할 수 있음을 의미하기도 합니다.
등록 연관에는 연관 오브젝트가 동시에 연관시킬 수 있는 대상화된 오브젝트의 인스턴스 수를 나타내는 다중성이 지정됩니다. 그런 다음 연관 오브젝트에 알리기 위해 발생해야 하는 사항을 나타내는 하나 이상의 조건이
연관에서 설명됩니다. 이벤트는 연관 또는 속성 값의 변경이거나 오퍼레이션의 평가(의 일부)일 수 있습니다. 이벤트가 발생하면 등록 오브젝트에 무언가가 발생했음을 알립니다. 이벤트의 결과에 대한 정보는 전송되지 않고
이벤트가 발생한 사실만이 통보됨에 유의하십시오. 연관 오브젝트가 이벤트 후 엔티티 오브젝트의 결과 상태에 관심이 있는 경우에는 엔티티 오브젝트와 정상적인 방식으로 상호 작용해야 합니다. 이는 링크도 필요함을
의미합니다.
예제
창고 관리 시스템에서는 화물 운반대의 예상 수명을 측정하기 위해 무작위 검사를 수행해야 합니다. 따라서 창고의 한 위치에서 다른 위치로 화물 운반대가 백 번째 이동할 때마다 특수 테스트 스테이션에서 화물 운반대를
점검합니다. 이는 제어 클래스 화물 운반대 무작위 검사기로부터 엔티티 클래스 화물 운반대에 대한 등록 연관으로 모델링됩니다. 화물 운반대의 각 인스턴스는 계수 속성을 사용하여 이동 횟수를 셉니다. 100번째 이동할
때 등록 연관의 조건으로 인해 화물 운반대 무작위 검사기에게 이를 알립니다. 그러면 화물 운반대 무작위 검사기는 화물 운반대를 테스트 스테이션으로 전송하는 특수 타스크를 작성합니다. 화물 운반대 무작위 검사기는
화물 운반대에 대한 링크를 필요로 하지 않지만 타스크를 시작하려면 타스크에 대한 링크가 하나 있어야 합니다.
화물 운반대가 100번째 이동된 후 화물 운반대 무작위 검사기는 새 타스크를 작성합니다.
등록 연관의 조건은 특정 속성이나 오퍼레이션보다는 추상 특성으로 표현해야 합니다. 이렇게 하면 연관 오브젝트가 변경될 수 있는 연관된 엔티티 오브젝트의 컨텐츠와 무관하게 보존됩니다.
등록 연관이 항상 두 오브젝트 인스턴스를 연관시키는 것은 아닙니다. 클래스에서 인스턴스로의 메타 관계도 올바릅니다. 이는 아래의 하위 섹션에서 설명합니다. 특정 이벤트가 우연히 클래스의 인스턴스화가 되는 경우처럼
오브젝트의 클래스가 등록 연관으로 연관되는 경우도 있습니다.
때로 엔티티 오브젝트에서 이벤트가 발생하면 경계 오브젝트에 알려야 할 필요가 있습니다. 이때 등록 연관이 필요합니다.
예제
이체를 통해 은행 계정에서 인출하는 경우를 고려해 보십시오. 이 경우 제어 오브젝트인 이체 핸들러가 엔티티 오브젝트인 계정에서 오퍼레이션을 수행합니다. 계정 잔액이 마이너스가 되면 경계 오브젝트 공고 작성자가
준비한 통지를 고객에게 전송합니다. 따라서 이 오브젝트에는 계정에 대한 등록 연관이 있습니다. 규정된 조건은 잔액이 0 이하로 내려가는 경우입니다. 이 이벤트가 발생하면 즉시 공고 작성자에 알립니다.
공고 작성자의 인스턴스가 항상 계정 인스턴스의 초과 인출을 감시하므로 이 특정 등록 연관은 인스턴스 연관입니다.
고객이 잔액 부족 이외의 추가 정보를 수신하지 않을 경우에는 이로써 충분합니다. 그러나 부족한 정도를 알려야 하는 경우 공고 작성자는 정확한 금액을 알기 위해 계정에 대한 오퍼레이션을 수행해야 합니다.
이를 위해 공고 작성자는 계정에 대한 링크가 있어야 합니다.
경계 클래스인 공고 작성자는 엔티티 오브젝트인 계정에서 특정 레벨 이하로 내려간 잔액의 이벤트에 등록합니다. 공고 작성자가 정확한 부족액을 알아야 할 필요가 있는 경우 계정에 대한 링크가 있어야 합니다.
경계 클래스로부터의 메타 연관 예제는 엔티티 오브젝트의 이벤트로 인해 사용자에게 새 창이 표시되는 경우입니다. 그러면 인터페이스-오브젝트 클래스가 엔티티 오브젝트의 인스턴스에 등록합니다.
예제
네트워크를 처리하는 시스템에는 네트워크의 노드로 기능하는 스테이션 및 이들을 상호 연결하는 회선이 있습니다. 각 스테이션은 많은 회선을 통해 다른 스테이션에 연결됩니다. 스테이션의 용량은 기능하고 있는 회선의 수에
따라 결정됩니다. 회선의 80% 이상이 기능하고 있는 경우 스테이션의 용량이 높고 20% 미만이 기능하고 있으면 낮은 것이며 이들 사이는 중간 용량입니다. 여기의 시스템 모델에는 두 가지 엔티티 오브젝트인 스테이션
및 회선이 있고 스테이션에는 회선에 대한 등록 연관이 있습니다. 연관의 조건은 사용 가능 또는 사용 불가능인 회선의 상태가 변경될 때 스테이션에 알려야 한다는 것입니다.
게다가 스테이션의 용량이 낮아지면 스테이션에 등록하는 제어 오브젝트에 이를 알립니다. 아래 예제에서 이를 설명합니다.
회선 인스턴스 중 하나의 상태가 변경되면 곧바로 스테이션 인스턴스에 이를 알립니다.
엔티티 클래스 사이의 등록 연관은 포함된 것이 보통 이미 존재하는 인스턴스이므로 거의 항상 인스턴스 연관입니다. 그러나 연관된 엔티티 오브젝트에서 지정된 이벤트가 발생할 때 등록 엔티티 오브젝트의
인스턴스가 작성되는 경우도 있을 수 있습니다. 그러한 경우 연관이 클래스에서 인스턴스로 이동합니다. 즉, 이는 메타 연관입니다. 특정 엔티티 오브젝트의 인스턴스가 다른 엔티티 오브젝트의 새 인스턴스가 작성되는
시기를 알고 싶어한다고 가정할 수도 있습니다.
예제
위의 예제에서 엔티티 오브젝트인 스테이션에는 엔티티 오브젝트인 회선에 대한 등록 연관이 있습니다. 따라서 회선 인스턴스의 상태가 변경될 때마다 스테이션에 이를 알립니다. 이러한 상태 변경은 스테이션의
용량을 변경합니다. 용량이 낮아지면 즉, 회선의 20% 미만이 기능하고 있으면 시스템은 네트워크를 통해 이 스테이션을 피할 수 있도록 적합한 새 방식을 찾아야 합니다. 이는 물론 스테이션에 대한 타스크가 아니지만
스테이션의 각 인스턴스에 대한 등록 연관이 있는 제어 오브젝트인 스테이션 감독자가 수행해야 합니다.
제어 오브젝트인 스테이션 감독자는 엔티티 오브젝트인 스테이션에 등록하고 차례로 엔티티 오브젝트인 회선에 등록합니다.
제어 오브젝트로부터의 등록 연관은 대부분 클래스에서 인스턴스로 또는 이 반대의 경우로 즉, 메타 연관입니다. 일반적으로 엔티티 오브젝트의 이벤트를 처리할 제어 오브젝트의 인스턴스는 이벤트가 실제로
발생할 때까지 작성되지 않습니다. 그러나 예를 들어, 제어 오브젝트의 인스턴스가 특정 엔티티 오브젝트의 새 인스턴스가 작성되는 시기를 알고 싶어한다고 가정할 수도 있습니다. 따라서 일부 몇 가지 경우에는 등록
연관이 인스턴스 연관일 수도 있습니다.
예제
위의 예제에서는 스테이션 감독자로부터 스테이션으로의 등록 연관에 메타 연관의 특성이 있습니다. 즉, 스테이션의 용량이 낮아지는 시기를 통보받는 것은 클래스인 스테이션 감독자입니다. 스테이션 감독자는 이
메시지를 수신하면 이벤트를 처리할 인스턴스를 작성합니다.
|