IUnknown은 Microsoft의 Component Object Model(컴포넌트 객체 모델, COM)에서 모든 인터페이스가 상속받는 기본 인터페이스이다. COM 객체는 이 인터페이스를 구현함으로써 객체 생명 주기 관리와 인터페이스 간의 쿼리를 표준화한다.
주요 특징
| 구분 | 내용 |
|---|---|
| 위치 | COM 아키텍처의 최상위 인터페이스 |
| 정의 | interface IUnknown { HRESULT QueryInterface(REFIID riid, void **ppvObject); ULONG AddRef(); ULONG Release(); } |
| 핵심 메서드 | 1. QueryInterface – 객체가 지원하는 다른 인터페이스를 얻기 위해 사용된다.2. AddRef – 객체에 대한 참조 카운트를 증가시켜 메모리 관리를 지원한다.3. Release – 참조 카운트를 감소시키며, 카운트가 0이 되면 객체가 파괴된다. |
| 역할 | - 객체 생명 주기 관리 (참조 카운팅) - 인터페이스 탐색을 통한 다형성 구현 |
| 응용 | COM 기반 애플리케이션, ActiveX 컨트롤, DirectX, Windows Shell 확장 등에서 객체 간 통신 및 재사용성을 제공한다. |
구현 및 사용 예
- COM 객체를 구현할 때 C++에서는
class MyObject : public IUnknown형태로 선언하고, 세 메서드를 모두 구현해야 한다. - 클라이언트 코드에서는
IUnknown* pUnk를 통해 객체를 얻은 뒤QueryInterface를 호출해 필요한 구체 인터페이스(IUnknown을 제외한 다른 COM 인터페이스)로 변환한다. AddRef와Release는 일반적으로 스마트 포인터(_com_ptr_t등)나 ATL/WRL 라이브러리에서 자동으로 관리된다.
표준화 및 문서
- IUnknown은 Microsoft가 정의한 COM 표준의 핵심 요소이며, 공식 문서는 Microsoft Docs 및 Windows SDK에 포함되어 있다.
- COM 사양서와 관련 API 레퍼런스에서는 IUnknown의 메서드 시그니처와 동작 규칙을 상세히 기술하고 있다.
참고
- IUnknown은 COM 객체 간의 상호 운용성을 보장하기 위한 최소한의 계약을 제공한다. 따라서 모든 COM 기반 기술에서 이 인터페이스를 기반으로 확장된 인터페이스가 정의된다.