Windows C++ 데스크톱 애플리케이션 형식
C++의 데스크톱 애플리케이션은 Windows API 전체에 액세스할 수 있고 창이나 시스템 콘솔에서 실행될 수 있는 네이티브 애플리케이션입니다. C++의 데스크톱 애플리케이션은 Windows XP에서 Windows 11까지 실행할 수 있습니다(하지만 Windows XP는 더 이상 공식적으로 지원되지 않으며 그 이후로 새로운 Windows API가 많이 있음).
C++의 모든 데스크톱 애플리케이션은 CRT(C 런타임) 및 표준 라이브러리 클래스와 함수, COM 개체, Windows API라고 통칭되는 공용 Windows 함수를 사용할 수 있습니다. C++로 작성된 Windows 데스크톱 애플리케이션에 대한 소개는 Win32 및 C++ 시작를 참조하세요.
아래에 설명된 것처럼 C++로 만들 수 있는 Windows 애플리케이션에는 여러 가지 광범위한 범주가 있습니다. 각각에는 자체 프로그래밍 모델과 Windows 관련 라이브러리 집합이 있습니다. C++ 표준 라이브러리와 타사 C++ 라이브러리는 어느 곳에서나 사용할 수 있습니다.
Windows 플랫폼 자체에 대한 설명서는 Windows 설명서를 참조하세요.
네이티브 데스크톱 클라이언트 애플리케이션
네이티브 데스크톱 클라이언트 애플리케이션 또는 Win32 애플리케이션은 네이티브 Windows C API 또는 COM(구성 요소 개체 모델) API CRT 및 표준 라이브러리 API와 타사 라이브러리를 사용하는 C 또는 C++로 작성된 Windows 데스크톱 애플리케이션입니다. 창에서 실행되는 Win32 애플리케이션을 사용하려면 개발자가 Windows 프로시저 함수 내에서 Windows 메시지를 처리해야 합니다. Win32 애플리케이션은 이름과는 상관없이 32비트(x86) 또는 64비트(x64) 이진 파일로 컴파일될 수 있습니다. Visual Studio IDE에서 x86과 Win32라는 용어는 동의어입니다.
- 기존 Windows C++ 프로그래밍을 시작하려면 Win32 및 C++ 시작를 참조하세요.
- 정교한 그래픽을 사용하는 기존 C++ 데스크톱 애플리케이션의 예를 보려면 Hilo: Windows용 C++ 애플리케이션 개발을 참조하세요.
명령줄(콘솔) 애플리케이션
C++ 콘솔 애플리케이션은 콘솔 창의 명령줄에서 실행되며 텍스트 출력만 표시할 수 있습니다.
- 자세한 내용은 C++에서 콘솔 계산기 만들기를 참조하세요.
UWP 애플리케이션
UWP(유니버설 Windows 플랫폼)는 최신 Windows API입니다. UWP 앱은 Windows 11, Windows 10, XBox, Windows Phone, Surface Hub 및 기타 디바이스에서 실행됩니다. UWP 앱은 사용자 인터페이스에 XAML을 사용하며 터치를 완전히 지원합니다. 데스크톱 애플리케이션은 UWP(유니버설 Windows 플랫폼) 앱과 다릅니다.
- 데스크톱 애플리케이션과 UWP 애플리케이션에 대한 자세한 내용은 기술 선택을 참조하세요.
- UWP에 대한 자세한 내용은 UWP(유니버설 Windows 플랫폼) 앱이란? 및 Windows 유니버설 앱 가이드를 참조하세요.
UWP에 대한 원래 C++ 지원은 구문 확장이 포함된 C++의 언어인 C++/CX 또는 표준 C++ 및 COM을 기반으로 하는 WRL(Windows 런타임 라이브러리)로 구성되었습니다. C++/CX와 WRL은 모두 계속 지원되지만 새로운 개발에는 권장되지 않습니다.
새 프로젝트의 경우 표준 C++를 완전히 기반으로 하며 더 빠른 성능을 제공하는 C++/WinRT를 권장합니다.
C++/CLI 애플리케이션 또는 구성 요소는 C++ 표준에서 허용하는 대로 C++ 구문에 대한 확장을 사용하여 .NET과 네이티브 C++ 코드 간의 상호 작용을 사용하도록 설정합니다. C++/CLI 애플리케이션에는 기본적으로 실행되는 부분과 .NET 네이티브 클래스 라이브러리에 액세스하여 .NET Framework에서 실행되는 부분이 있을 수 있습니다. C++/CLI는 C# 또는 Visual Basic으로 작성된 코드로 작업해야 하는 네이티브 C++ 코드가 있는 경우 기본 설정되는 옵션입니다. 사용자 인터페이스 코드가 아닌 .NET DLL에서 사용하기 위한 것입니다.
- 자세한 내용은 C++/CLI를 사용한 .NET 프로그래밍(Visual C++)을 참조하세요.
데스크톱 브리지
Windows 10 이상에서는 기존 데스크톱 애플리케이션이나 COM 개체를 UWP 앱으로 패키지할 수 있습니다. 터치와 같은 UWP 기능을 사용하거나 최신 Windows API 집합의 API를 호출할 수 있습니다. Visual Studio의 데스크톱 솔루션에 UWP 앱을 추가하고, 단일 패키지로 함께 패키지하고, Windows API를 사용하여 앱 간에 통신할 수도 있습니다.
Visual Studio 2017 버전 15.4 이상에서는 Windows 애플리케이션 패키지 프로젝트를 만들어 기존 데스크톱 애플리케이션 패키지 작업을 크게 간소화할 수 있습니다. 데스크톱 애플리케이션에서 사용할 수 있는 레지스트리 호출이나 API에는 몇 가지 제한 사항이 적용됩니다. 그러나 대부분의 경우 앱 패키지에서 실행되는 동안 유사한 기능을 달성하기 위해 대체 코드 경로를 만들 수 있습니다.
- 자세한 내용은 데스크톱 브리지를 참조하세요.
C++ 또는 .NET?
일반적으로 C#의 .NET 프로그래밍은 덜 복잡하고 오류 발생 가능성이 낮으며 Win32 또는 MFC보다 더 최신적인 개체 지향 API를 갖추고 있습니다. 대부분의 경우 성능은 충분합니다.
.NET은 풍부한 그래픽을 위한 WPF(Windows Presentation Foundation) 기능을 갖추고 있으며 Win32와 최신 Windows 런타임 API를 모두 사용할 수 있습니다. 일반적으로 다음이 필요한 경우 데스크톱 애플리케이션에 C++를 사용하는 것이 좋습니다.
- 메모리 사용량을 정밀하게 제어
- 전력 사용량에 있어서 최고의 경제성
- 일반 컴퓨팅에 GPU를 사용하는 방법
- DirectX에 대한 액세스
- 표준 C++ 라이브러리의 과도한 사용
C++의 강력함과 효율성을 .NET 프로그래밍에 활용하는 것도 가능합니다. C#에서 사용자 인터페이스를 만들고 C++/CLI를 사용하여 애플리케이션이 네이티브 C++ 라이브러리를 사용할 수 있도록 할 수 있습니다.
- 자세한 내용은 C++/CLI를 사용한 .NET 프로그래밍을 참조하세요.
게임
DirectX 게임은 PC 또는 Xbox에서 실행할 수 있습니다.
- 자세한 내용은 DirectX 그래픽 및 게임을 참조하세요.
SQL Server 데이터베이스 클라이언트
네이티브 코드에서 SQL Server 데이터베이스에 액세스하려면 ODBC 또는 OLE DB를 사용합니다.
- 자세한 내용은 SQL Server Native Client를 참조하세요.
Windows 디바이스 드라이버
드라이버는 하드웨어 디바이스의 데이터를 애플리케이션 및 기타 운영 체제 구성 요소에 액세스할 수 있도록 하는 하위 수준 구성 요소입니다.
- 자세한 내용은 WDK(Windows 드라이버 키트)를 참조하세요.
Windows 서비스
Windows 서비스는 사용자 상호 작용이 거의 또는 전혀 없이 백그라운드에서 실행될 수 있는 프로그램입니다. UNIX 시스템에서는 이러한 프로그램을 디먼이라고 합니다.
- 자세한 내용은 서비스를 참조하세요.
COM:
COM(구성 요소 개체 모델)은 서로 다른 언어로 작성된 프로그램이 서로 상호 운용될 수 있도록 하는 사양입니다.
많은 Windows 구성 요소는 COM 개체로 구현되며 개체 만들기, 인터페이스 검색 및 개체 제거에 대한 표준 COM 규칙을 따릅니다. C++ 데스크톱 애플리케이션에서 COM 개체를 사용하는 것은 상대적으로 간단하지만 고유의 COM 개체를 작성하는 방법은 더 복잡합니다.
ATL(액티브 템플릿 라이브러리)은 COM 개발을 간소화하는 매크로와 도우미 함수를 제공합니다. 자세한 내용은 ATL COM Desktop Components을 참조하세요.
MFC
MFC 애플리케이션은 Microsoft Foundation Classes를 사용하여 사용자 인터페이스를 만드는 Windows 데스크톱 애플리케이션입니다. MFC 애플리케이션은 COM 구성 요소와 CRT 및 표준 라이브러리 API를 사용할 수도 있습니다.
MFC는 창 메시지 루프 및 Windows API에 대한 얇은 C++ 개체 지향 래퍼를 제공합니다. MFC는 많은 사용자 인터페이스 컨트롤이나 사용자 지정 사용자 컨트롤이 있는 애플리케이션, 특히 엔터프라이즈 형식 애플리케이션에 대한 기본 선택입니다.
MFC는 창 관리, serialization, 텍스트 조작, 인쇄 및 리본과 같은 최신 사용자 인터페이스 요소에 대한 편리한 도우미 클래스를 제공합니다. MFC를 효과적으로 사용하려면 Win32에 익숙해야 합니다.
SDK, 라이브러리, 헤더 파일
Visual Studio에는 CRT(C 런타임 라이브러리), C++ 표준 라이브러리 및 기타 Microsoft 관련 라이브러리가 포함되어 있습니다. 이러한 라이브러리에 대한 헤더 파일이 포함된 대부분의 폴더는 Visual Studio 설치 디렉터리의 \VC\ 폴더(예: C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\include\
)에 있습니다. Windows 및 CRT 헤더 파일은 Windows SDK 설치 폴더(예: C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt\
)에 있습니다.
vcpkg 패키지 관리자를 사용하면 수백 개의 Windows용 타사 오픈 소스 라이브러리를 편리하게 설치할 수 있습니다. 자세한 내용은 vcpkg를 참조하세요.
Microsoft 라이브러리는 다음과 같습니다.
MFC(Microsoft Foundation Class): 단추, 목록 상자, 트리 뷰 및 기타 컨트롤이 있는 다양한 기능의 사용자 인터페이스가 있는 일반적인 Windows 프로그램, 특히 엔터프라이즈 애플리케이션을 만들기 위한 개체 지향 프레임워크입니다. 자세한 내용은 MFC Desktop Applications을 참조하세요.
ATL(Active Template Library): COM 구성 요소를 만들기 위한 강력한 도우미 라이브러리입니다. 자세한 내용은 ATL COM Desktop Components을 참조하세요.
C++ AMP(C++ Accelerated Massive Parallelism): GPU에서 고성능 일반 계산 작업에 사용할 수 있는 라이브러리입니다. 자세한 내용은 C++ AMP (C++ Accelerated Massive Parallelism)을 참조하세요.
동시성 런타임: 다중 코어 및 다중 코어 디바이스에 대한 병렬 및 비동기 프로그래밍 작업을 간소화하는 라이브러리입니다. 자세한 내용은 동시성 런타임을 참조하세요.
많은 Windows 프로그래밍 시나리오에는 Windows 운영 체제 구성 요소에 액세스할 수 있는 헤더 파일을 포함하는 Windows SDK도 필요합니다. 기본적으로 Visual Studio는 유니버설 Windows 앱 개발을 가능하게 하는 C++ 데스크톱 워크로드의 구성 요소로 Windows SDK를 설치합니다. UWP 앱을 개발하려면 Windows 10 이상 버전의 Windows SDK가 필요합니다.
- 자세한 내용과 다운로드 링크는 Windows SDK를 참조하세요.
- 이전 버전의 Windows용 Windows SDK에 대한 자세한 내용은 Windows SDK 보관를 참조하세요.
설치하는 모든 Windows SDK 버전의 기본 위치는 Program Files (x86)\Windows Kits
입니다.
개발 도구
Visual Studio는 네이티브 코드에 대한 강력한 디버거, 정적 분석 도구, 그래픽 디버깅 도구, 완벽한 기능을 갖춘 코드 편집기, 유닛 테스트 지원 및 다른 많은 도구와 유틸리티를 포함합니다.
- 자세한 내용은 Visual Studio 개발 시작 및 Visual Studio에서 C++ 개발 개요를 참조하세요.
이 섹션의 내용
링크 | 설명 |
---|---|
연습: Windows 데스크톱 애플리케이션 만들기(C++) | 네이티브 Windows 데스크톱 애플리케이션을 만듭니다. |
방법: Windows 데스크톱 애플리케이션에서 Windows SDK 사용 | Windows SDK를 사용하여 빌드할 프로젝트를 설정하는 단계를 설명합니다. |
연습: 표준 C++ 프로그램 만들기 | Windows 콘솔 애플리케이션을 만듭니다. |
연습: C++로 콘솔 계산기 만들기 | 간단한 Windows 콘솔 애플리케이션을 만듭니다. Win32 또는 Win64 콘솔 애플리케이션에는 고유의 창이나 메시지 루프가 없습니다. 콘솔 창에서 실행되고 입력 및 출력이 명령줄을 통해 처리됩니다. |
네이티브 데스크톱 애플리케이션 배포 | Windows에 네이티브 애플리케이션을 배포합니다. |
연습: 정적 라이브러리 만들기 및 사용 | .lib 이진 파일을 만드는 방법. |
Windows 데스크톱 마법사 | 마법사를 사용하여 새 Windows 프로젝트를 만듭니다. |
ATL(액티브 템플릿 라이브러리) | ATL 라이브러리를 사용하여 C++에서 COM 구성 요소를 만듭니다. |
ATL 및 MFC 공유 클래스 | ATL 및 MFC에서 공유되는 CString 과 같은 클래스를 사용합니다. |
MFC(Microsoft Foundation Class) | MFC를 사용하여 대화 상자 및 컨트롤이 포함된 크거나 작은 Windows 애플리케이션 만들기 |
데이터 액세스 | OLE DB 및 ODBC |
텍스트 및 문자열 | Windows의 다양한 문자열 형식. |
리소스 파일에 대한 작업 | 데스크톱 애플리케이션에 이미지, 아이콘, 스트링 테이블 및 기타 리소스를 추가하는 방법. |
DirectX를 사용하여 게임을 만들기 위한 리소스(C++) | C++로 게임을 만들기 위한 콘텐츠에 대한 링크. |
관련 문서
제목 | 설명 |
---|---|
Windows 개발 | Windows API 및 COM에 대한 정보를 제공합니다. 일부 Windows API 및 타사 DLL이 COM 개체로 구현됩니다. |
Hilo: Developing C++ Applications for Windows 7 | Windows Animation 및 Direct2D를 사용하는 리치 클라이언트 Windows 데스크톱 애플리케이션을 만들어서 캐러셀 기반 사용자 인터페이스를 만드는 방법에 대해 설명합니다. 이 자습서는 Windows 7 이후로 업데이트되지 않았지만 여전히 Win32 프로그래밍에 대한 철저한 소개를 제공합니다. |
C++/CLI를 사용한 .NET 개발 | .NET 애플리케이션 및 구성 요소와 통신할 수 있는 네이티브 C++ 라이브러리용 래퍼를 만듭니다. |
.NET 및 UWP용 구성 요소 확장 | C++/CX 및 C++/CLI에서 공유되는 구문 요소에 대한 참조. |
유니버설 Windows 앱(C++) | C++/CX 또는 WRL(Windows 런타임 템플릿 라이브러리)을 사용하여 UWP 애플리케이션을 작성합니다. |
COM 및 .NET을 위한 C++ 특성 | .NET 또는 COM을 사용하는 Windows 전용 프로그래밍을 위한 비표준 특성. |