액티브 템플릿 라이브러리

액티브 템플릿 라이브러리(, ATL)는 마이크로소프트가 개발한 템플릿 기반 C++ 클래스들의 집합으로, 컴포넌트 오브젝트 모델(COM) 오브젝트의 프로그래밍을 단순화할 목적으로 만들어졌다. 비주얼 C++의 COM 지원을 통해 개발자들은 다양한 COM 오브젝트, OLE 자동화 서버, 액티브X 컨트롤러를 개발할 수 있다. ATL은 오브젝트 마법사가 포함되어 있어서 최소한의 손 코딩으로 빠르게 오브젝트의 주요 구조를 구성할 수 있다. COM 클라이언트 측에서 ATL은 COM 참조 카운팅을 다루는 스마트 포인터를 제공한다. 라이브러리는 큐리어슬리 리커링 템플릿 패턴(curiously recurring template pattern, CRTP)을 상당하게 사용한다.

 역사 
COM 오브젝트들은 마이크로소프트 파운데이션 클래스 라이브러리(MFC)를 사용하여 만들 수도 있지만 DLL 지원이 필요한 더 큰 바이너리를 만들어낸다. 한편 ATL은 MFC의 그래픽 사용자 인터페이스 부분이 필요하지 않은 상황에서 더 가벼운 대안이 될 수 있다.Microsoft MSDN: Recommendations for Choosing Between ATL and MFC

버전 3(비주얼 스튜디오 6.0)의 뒤를 직접 잇는 ATL 버전 7(비주얼 스튜디오 2003)에서 CString과 같은 수많은 MFC 클래스들은 ATL에서 이용이 가능하게 되었는데, 두 라이브러리에 의해 공유되는 ATLMFC 공통 레이어로 이동되었다는 표현이 더 정확하다. ATL 버전 7은 또한 CLI 속성과 유사한 것을 제공하기 위해 C++의 속성들을 도입하였으나 이것들은 특히 성공적이지 못했고 ATL 버전 8(비주얼 스튜디오 2005)에서 경시되었다. 다양한 마법사들은 더 이상 기본적으로 이들을 생성하지 않는다. 버전 7은 또한 새로운 문자열 변환 클래스들을 도입하였다.

2009년 7월 28일, 마이크로소프트는 ATL을 사용하여 만든 액티브X 컨트롤이 원격 코드 실행 보안 취약점에 취약해질 수 있는 버그를 수정하기 위한 패치를 공개하였다.

비주얼 스튜디오 2013 이후로, 비주얼 C++ 2013의 ATL 코드는 정적이며, DLL을 제거한다.ATL and MFC changes and fixes in Visual Studio 2013 http://blogs.msdn.com/b/vcblog/archive/2013/08/20/atl-and-mfc-changes-and-fixes-in-visual-studio-2013.aspx

 지원 클래스 
ATL은 수많은 RAI(Resource Acquisition Is Initialization) 클래스들을 포함하고 있어서 COM 타입의 관리를 단순화시킨다. 가장 일반적으로 쓰이는 클래스는 다음과 같다:

 CComPtr<T>Microsoft MSDN: CComPtr Class 범용 스마트 포인터,
 CComBSTRMicrosoft MSDN: CComBSTR Class BSTR 래퍼(wrapper),
 CComVariantMicrosoft MSDN: CComVariant Class VARIANT 래퍼,
 CComSafeArray<T>Microsoft MSDN: CComSafeArray Class SAFEARRAY 래퍼.

 컴파일러 COM 지원 
공식적으로 ATL의 일부는 아니지만, 마이크로소프트 비주얼 C++은 또한 COM 타입 관리의 단순화를 위해 추가적인 C++ RAII 클래스들은 포함하고 있다. 이 컴파일러 COM 지원 클래스들은 ATL과 함께, 또는 ATL을 대신하여 사용할 수 있으며 다음을 포함한다:

 _com_ptr_tMicrosoft MSDN: _com_ptr_t Class COM 인터페이스 이름을 "Ptr" 접미사로 표현하는 스마트 포인터,
 _bstr_tMicrosoft MSDN: _bstr_t Class BSTR 래퍼,
 _variant_tMicrosoft MSDN: _variant_t Class VARIANT 래퍼,
 _com_errorMicrosoft MSDN: _com_error Class HRESULT 래퍼.
비주얼 스튜디오 2012를 기준으로, 컴파일러 COM 지원 클래스들은 SAFEARRAY 래퍼를 포함하지 않고 있다.

 같이 보기 
 ATL 서버
 C++/CX
 OLE 자동화
 표준 템플릿 라이브러리
 윈도우 템플릿 라이브러리
 마이크로소프트 윈도우 SDK
 C++ 템플릿 라이브러리 목록

 각주 

 외부 링크 
 Official MSDN reference documentation

분류:C++ 라이브러리
템플릿 라이브러리