인터페이스 및 인터페이스 구현

COM은 인터페이스 정의와 해당 구현을 근본적으로 구분합니다.

인터페이스는 실제로 사용이 정의되었지만 구현이 아닌 관련 함수 프로토타입 그룹으로 구성된 계약입니다. 이러한 함수 프로토타입은 C++ 프로그래밍의 순수 가상 기본 클래스와 동일합니다. 인터페이스 정의는 메서드, 반환 형식, 매개 변수의 수 및 형식 및 수행해야 하는 작업을 호출하는 인터페이스의 멤버 함수를 지정합니다. 인터페이스와 연결된 구현이 없습니다.

인터페이스 구현은 프로그래머가 인터페이스 정의에 지정된 작업을 수행하기 위해 제공하는 코드입니다. 프로그래머가 개체 기반 애플리케이션에서 사용할 수 있는 많은 인터페이스의 구현은 COM 라이브러리에 포함됩니다. 그러나 프로그래머는 이러한 구현을 무시하고 직접 작성할 수 있습니다. 인터페이스 구현은 해당 개체의 instance 만들어질 때 개체와 연결되고 구현은 개체가 제공하는 서비스를 제공합니다.

예를 들어 IStack이라는 가상 인터페이스는 Push 및 Pop이라는 두 메서드를 정의하여 Pop 메서드에 대한 연속 호출이 이전에 Push 메서드에 전달된 값을 역순으로 반환하도록 지정할 수 있습니다. 이 인터페이스 정의는 코드에서 함수를 구현하는 방법을 지정하지 않습니다. 인터페이스를 구현할 때 한 프로그래머가 스택을 배열로 구현하고 해당 배열에 액세스하는 방식으로 Push 및 Pop 메서드를 구현하는 반면, 다른 프로그래머가 연결된 목록을 사용하고 그에 따라 메서드를 구현할 수 있습니다. Push 및 Pop 메서드의 특정 구현에 관계없이 IStack 인터페이스에 대한 포인터의 메모리 내 표현과 클라이언트의 사용은 인터페이스 정의에 의해 완전히 결정됩니다.

단순 개체는 단일 인터페이스만 지원합니다. 포함 가능한 개체와 같은 더 복잡한 개체는 일반적으로 여러 인터페이스를 지원합니다. 클라이언트는 해당 인터페이스 중 하나에 대한 포인터를 통해서만 COM 개체에 액세스할 수 있습니다. 그러면 클라이언트가 해당 인터페이스를 구성하는 메서드를 호출할 수 있습니다. 이러한 메서드는 클라이언트가 개체의 데이터를 사용하는 방법을 결정합니다.

인터페이스는 개체와 해당 클라이언트 간의 계약을 정의합니다. 계약은 각 인터페이스와 연결되어야 하는 메서드와 각 메서드의 동작을 입력 및 출력 측면에서 지정합니다. 계약은 일반적으로 인터페이스에서 메서드를 구현하는 방법을 정의하지 않습니다. 계약의 또 다른 중요한 측면은 개체가 인터페이스를 지원하는 경우 어떤 식으로든 해당 인터페이스의 모든 메서드를 지원해야 한다는 것입니다. 구현의 모든 메서드가 작업을 수행할 필요는 없습니다. 개체가 메서드에 내포된 함수를 지원하지 않는 경우 해당 구현은 간단한 반환이거나 의미 있는 오류 메시지의 반환일 수 있지만 메서드가 있어야 합니다.

COM 개체 및 인터페이스