COM 및 연결 가능한 개체의 이벤트
프로그램이 발생한 항목을 감지하면 클라이언트에 알릴 수 있습니다. 예를 들어 주식 시세 프로그램이 주식 가격의 변경을 감지하는 경우 모든 고객에게 변경 사항을 알릴 수 있습니다. 이 알림 프로세스를 이벤트 발생이라고 합니다.
COM을 사용하면 서버 개체가 COM 이벤트를 사용하여 알림을 받을 개체에 대한 정보 없이 이벤트를 발생시킬 수 있습니다. 개체는 연결할 수 있는 개체 를 사용하여 알림을 요청한 클라이언트에 대한 자세한 정보를 유지할 수도 있습니다.
COM 연결 가능한 개체는 들어오는 인터페이스 외에도 클라이언트에 나가는 인터페이스를 제공합니다. 따라서 개체와 해당 클라이언트는 양방향 통신에 참여할 수 있습니다. 들어오는 인터페이스는 개체에 구현되고 개체의 외부 클라이언트로부터 호출을 수신하는 반면 나가는 인터페이스는 클라이언트의 싱크에서 구현되고 개체에서 호출을 받습니다. 개체는 사용하려는 인터페이스를 정의하고 클라이언트는 이를 구현합니다.
개체는 들어오는 인터페이스를 정의하고 이러한 인터페이스의 구현을 제공합니다. 들어오는 인터페이스는 개체의 IUnknown::QueryInterface 메서드를 통해 클라이언트에서 사용할 수 있습니다. 클라이언트는 개체에서 들어오는 인터페이스의 메서드를 호출하고 개체는 클라이언트를 대신하여 원하는 작업을 수행합니다.
나가는 인터페이스도 개체에 의해 정의되지만 클라이언트는 클라이언트가 만드는 싱크 개체에서 나가는 인터페이스의 구현을 제공합니다. 그런 다음 개체는 싱크 개체에서 나가는 인터페이스의 메서드를 호출하여 개체의 변경 내용을 클라이언트에 알리거나, 클라이언트에서 이벤트를 트리거하거나, 클라이언트에서 무언가를 요청하거나, 실제로 개체 작성자가 어떤 용도로든 사용할 수 있도록 합니다.
나가는 인터페이스의 예는 해당 이벤트를 클라이언트에 알리기 위해 푸시 단추 컨트롤에 의해 정의된 IButtonSink 인터페이스입니다. 예를 들어 단추 개체는 사용자가 화면에서 단추를 클릭할 때 클라이언트의 싱크 개체에서 IButtonSink::OnClick을 호출합니다. 단추 컨트롤은 나가는 인터페이스를 정의합니다. 단추의 클라이언트가 이벤트를 처리하려면 클라이언트가 싱크 개체에서 나가는 인터페이스를 구현한 다음 해당 싱크를 단추 컨트롤에 연결해야 합니다. 그런 다음 단추에서 이벤트가 발생하면 단추는 싱크를 호출하며, 이때 클라이언트는 해당 단추 클릭에 할당하려는 작업을 실행할 수 있습니다.
연결 가능한 개체는 개체-클라이언트 통신을 위한 일반적인 메커니즘을 제공합니다. 모든 종류의 이벤트 또는 알림을 노출하려는 모든 개체는 이 기술을 사용할 수 있습니다. 일반적인 연결 가능한 개체 기술 외에도 COM은 클라이언트에 관심 있는 특정 이벤트를 클라이언트에 알리기 위해 개체에서 사용하는 많은 특수한 용도의 싱크 및 사이트 인터페이스를 제공합니다. 예를 들어 IAdviseSink 는 개체에서 클라이언트에 데이터를 알리고 개체의 변경 내용을 보는 데 사용할 수 있습니다.
자세한 내용은 아래 항목을 참조하세요.