{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name                       = 액티브 템플릿 라이브러리
| logo                       = 
| screenshot                 = 
| caption                    = 
| collapsible                = 
| author                     = 
| developer                  = [[마이크로소프트]]
| released                   = 
| latest release version     = 
| latest release date        = 
| latest preview version     = 
| latest preview date        = 
| programming language       = [[C++]]
| operating system           = [[마이크로소프트 윈도우]]
| platform                   = 
| size                       = 
| language                   = 
| status                     = 개발 중
| genre                      = [[라이브러리 (컴퓨팅)|라이브러리]] or [[소프트웨어 프레임워크|프레임워크]]
| license                    = [[사유 소프트웨어|사유]]
| website                    = 
}}

'''액티브 템플릿 라이브러리'''({{lang|en|Active Template Library}}, ATL)는 [[마이크로소프트]]가 개발한 템플릿 기반 [[C++]] 클래스들의 집합으로, [[컴포넌트 오브젝트 모델]](COM) 오브젝트의 프로그래밍을 단순화할 목적으로 만들어졌다. [[비주얼 C++]]의 COM 지원을 통해 개발자들은 다양한 COM 오브젝트, [[OLE 자동화]] 서버, [[액티브X]] 컨트롤러를 개발할 수 있다.<ref>{{서적 인용| title = ATL COM | edition = 1st | chapter = ATL and COM | page = 6 | last = Grimes | first = Richard | year = 1998 | publisher = Wrox Press | isbn = 1-86100-249-1 }}</ref><ref>{{서적 인용| title = Beginning ATL 3 COM Programming | edition = 1st | chapter = Building and calling a COM object using ATL | page = 63 | last = Grimes | first = Richard | year = 1999 | publisher = Wrox Press | isbn = 978-1-86100-120-7 }}</ref> ATL은 오브젝트 마법사가 포함되어 있어서 최소한의 손 코딩으로 빠르게 오브젝트의 주요 구조를 구성할 수 있다. COM 클라이언트 측에서 ATL은 COM 참조 카운팅을 다루는 [[스마트 포인터]]를 제공한다. 라이브러리는 [[큐리어슬리 리커링 템플릿 패턴]](curiously recurring template pattern, CRTP)을 상당하게 사용한다.

== 역사 ==
COM 오브젝트들은 [[마이크로소프트 파운데이션 클래스 라이브러리]](MFC)를 사용하여 만들 수도 있지만 [[동적 링크 라이브러리|DLL]] 지원이 필요한 더 큰 바이너리를 만들어낸다.<ref>{{서적 인용| title = Visual C++ 6 Unleashed | edition = 1st | chapter = Active Documents | page = 733 | last = Williams | first = Mickey | year = 2000 | publisher = Sams | isbn = 978-0-672-31241-0 }}</ref> 한편 ATL은 MFC의 그래픽 사용자 인터페이스 부분이 필요하지 않은 상황에서 더 가벼운 대안이 될 수 있다.<ref>Microsoft MSDN: [https://msdn.microsoft.com/en-us/library/bk8ytxz5.aspx Recommendations for Choosing Between ATL and MFC]</ref>

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

2009년 7월 28일, 마이크로소프트는 ATL을 사용하여 만든 [[액티브X]] 컨트롤이 원격 코드 실행 보안 취약점에 취약해질 수 있는 버그를 수정하기 위한 패치를 공개하였다.<ref>{{웹 인용|url=http://msdn.microsoft.com/en-us/visualc/ee309358.aspx |title=ATL Security Update |publisher= Microsoft|work = MSDN| date=2009-07-28 |accessdate=2011-09-19}}</ref>

비주얼 스튜디오 2013 이후로, 비주얼 C++ 2013의 ATL 코드는 정적이며, DLL을 제거한다.<ref>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</ref>

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

* <code>CComPtr<T></code><ref>Microsoft MSDN: [https://msdn.microsoft.com/en-us/library/ezzw7k98.aspx CComPtr Class]</ref> 범용 스마트 포인터,
* <code>CComBSTR</code><ref>Microsoft MSDN: [https://msdn.microsoft.com/en-us/library/zh7x9w3f.aspx CComBSTR Class]</ref> BSTR 래퍼(wrapper),
* <code>CComVariant</code><ref>Microsoft MSDN: [https://msdn.microsoft.com/en-us/library/ac97df2h.aspx CComVariant Class]</ref> VARIANT 래퍼,
* <code>CComSafeArray<T></code><ref>Microsoft MSDN: [https://msdn.microsoft.com/en-us/library/3xzbsee8.aspx CComSafeArray Class]</ref> SAFEARRAY 래퍼.

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

* <code>_com_ptr_t</code><ref>Microsoft MSDN: [https://msdn.microsoft.com/en-us/library/417w8b3b.aspx _com_ptr_t Class]</ref> COM 인터페이스 이름을 "Ptr" 접미사로 표현하는 스마트 포인터,
* <code>_bstr_t</code><ref>Microsoft MSDN: [https://msdn.microsoft.com/en-us/library/zthfhkd6.aspx _bstr_t Class]</ref> BSTR 래퍼,
* <code>_variant_t</code><ref>Microsoft MSDN: [https://msdn.microsoft.com/en-us/library/x295h94e.aspx _variant_t Class]</ref> VARIANT 래퍼,
* <code>_com_error</code><ref>Microsoft MSDN: [https://msdn.microsoft.com/en-us/library/0ye3k36s.aspx _com_error Class]</ref> HRESULT 래퍼.
비주얼 스튜디오 2012를 기준으로, 컴파일러 COM 지원 클래스들은 SAFEARRAY 래퍼를 포함하지 않고 있다.

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

== 각주 ==
{{각주}}

== 외부 링크 ==
* [https://msdn.microsoft.com/en-us/library/t9adwcde.aspx Official MSDN reference documentation]

{{전거 통제}}

[[분류:C++ 라이브러리]]
[[분류:마이크로소프트 API|템플릿 라이브러리]]