C++를 이용한 Windows 프로그래밍 개요Overview of Windows Programming in C++

C++를 사용하면 다양한 종류의 Windows 응용 프로그램을 만들 수 있습니다.There are several broad categories of Windows applications that you can create with C++. 각각 고유한 프로그래밍 모델과 Windows 관련 라이브러리 집합이 있지만 C++ 표준 라이브러리나 타사 C++ 라이브러리도 사용할 수 있습니다.Each has its own programming model and set of Windows-specific libraries, but the C++ standard library and third-party C++ libraries can be used in any of them.

이 섹션에서는 Visual Studio 및 MFC/ATL 래퍼 라이브러리를 사용하여 Windows 프로그램을 만드는 방법을 설명합니다.This section discusses how to use Visual Studio and the MFC/ATL wrapper libraries to create Windows programs. Windows 플랫폼 자체에 대한 설명서는 Windows 설명서를 참조하세요.For documentation on the Windows platform itself, see Windows documentation.

명령줄(콘솔) 응용 프로그램Command line (console) applications

C++ 콘솔 응용 프로그램은 콘솔 창의 명령줄에서 실행되고 텍스트 출력만 표시할 수 있습니다.C++ console applications run from the command line in a console window and can display text output only. 자세한 내용은 콘솔 응용 프로그램을 참조하세요.For more information, see Console Applications.

네이티브 데스크톱 클라이언트 응용 프로그램Native desktop client applications

네이티브 데스크톱 클라이언트 응용 프로그램은 운영체제 시스템에 액세스하기 위해 원래의 네이티브 Windows C API 또는 구성 요소 개체 모델(COM) API를 사용하는 C 또는 C++을 이용한 창을 사용하는 애플리케이션입니다.A native desktop client application is a C or C++ windowed application that uses the original native Windows C APIs or Component Object Model (COM) APIs to access the operating system. 이러한 API들은 주로 C로 작성됩니다. 네이티브 데스크톱 앱을 만드는 방법은 여러 가지입니다. 하나는 Win32 API를 직접 사용하여 C 스타일의 메시지 루프로 운영 체제 시스템 이벤트를 처리하는 프로그램입니다.Those APIs are themselves written mostly in C. There's more than one way to create a native desktop app: You can program using the Win32 APIs directly, using a C-style message loop that processes operating system events. 또는 Win32를 래핑하는 가벼운 객체 지향 C++ 라이브러리인 MFC(Microsoft Foundation Classes)를 사용하여 프로그래밍할 수 있습니다.Or, you can program using Microsoft Foundation Classes (MFC), a lightly object-oriented C++ library that wraps Win32. 이러한 접근법은 유니버설 Windows 플랫폼(UWP) 비교하여 "현대적"이라고 간주되지는 않지만, 두 방법 모두 여전히 완전하게 지원되며 지금도 전 세계적으로 수백만 줄의 코드가 실행되고 있습니다.Neither approach is considered "modern" compared to the Universal Windows Platform (UWP), but both are still fully supported and have millions of lines of code running in the world today. 윈도우에서 실행되는 Win32 응용 프로그램의 경우 개발자는 Windows 프로시저 함수 내에서 Windows 메시지를 명시적으로 사용해야 합니다.A Win32 application that runs in a window requires the developer to work explicitly with Windows messages inside a Windows procedure function. 이름과는 달리 Win32 응용 프로그램은 32비트(x86) 또는 64비트(x64) 바이너리로 컴파일될 수 있습니다.Despite the name, a Win32 application can be compiled as a 32-bit (x86) or 64-bit (x64) binary. Visual Studio IDE에서 x86 및 Win32라는 용어는 동의어입니다.In the Visual Studio IDE, the terms x86 and Win32 are synonymous.

기존의 Windows C++ 프로그래밍을 시작하려면 Win32 및 C++ 시작을 참조하세요.To get started with traditional Windows C++ programming, see Get Started with Win32 and C++. Win32에 대해 이해를 하면 MFC 데스크톱 응용 프로그램에 대해 더 쉽게 배울 수 있습니다.After you gain some understanding of Win32, it will be easier to learn about MFC Desktop Applications. 정교한 그래픽을 사용하는 기존의 C++ 데스크톱 응용 프로그램의 예는 Hilo: Windows용 C++ 응용 프로그램 개발을 참조합니다.For an example of a traditional C++ desktop application that uses sophisticated graphics, see Hilo: Developing C++ Applications for Windows.

C++? .NET?C++ or .NET?

일반적으로의 C# .NET 프로그래밍은 덜 복잡하고 오류가 덜 발생하며 WIN32 또는 MFC 보다 최신 객체 지향 API를 포함합니다.In general, .NET programming in C# is less complex, less error-prone, and has a more modern object-oriented API than Win32 or MFC. 대부분의 상황에서 적합 이상의 성능을 얻을 수 있기 때문입니다.In most cases, its performance is more than adequate. .NET은 다양한 그래픽을 위한 Windows Presentation Foundation(WPF) 기능을 제공하며, Win32 및 최신 Windows 런타임 API를 모두 사용할 수 있습니다..NET features the Windows Presentation Foundation (WPF) for rich graphics, and you can consume both Win32 and the modern Windows Runtime API. 아래의 경우 일반적으로 데스크탑 응용 프로그램에 C++를 사용할 것을 권장합니다.As a general rule, we recommend using C++ for desktop applications when you require:

  • 메모리 사용량에 대한 정밀한 제어precise control over memory usage
  • 전력 소비 효율의 극대화the utmost economy in power consumption
  • GPU 사용한 일반 연산usage of the GPU for general computing
  • DirectX에 대한 액세스access to DirectX
  • 표준 C++ 라이브러리의 대량 사용heavy usage of standard C++ libraries

또한 C++의 기능과 효율성을 .NET 프로그래밍과 결합할 수 있습니다.It's also possible to combine the power and efficiency of C++ with .NET programming. C#에서 사용자 인터페이스를 만들고 C++/CLI를 사용하여 응용 프로그램에서 네이티브 C++ 라이브러리를 사용할 수 있습니다.You can create a user interface in C# and use C++/CLI to enable the application to consume native C++ libraries. 자세한 내용은 C++/CLI를 이용한 .NET 프로그래밍을 참조하세요.For more information, see .NET Programming with C++/CLI.

COM 구성 요소COM Components

구성 요소 개체 모델(COM)은 다른 언어로 작성된 프로그램 간에 서로 통신할 수 있게 해줍니다.The Component Object Model (COM) is a specification that enables programs written in different languages to communicate with one another. 많은 Windows 구성 요소가 COM 개체로 구현되며 개체 만들기, 인터페이스 검색 및 개체 소멸에 대한 표준 COM 규칙을 따릅니다.Many Windows components are implemented as COM objects and follow standard COM rules for object creation, interface discovery, and object destruction. C++ 데스크톱 응용 프로그램에서 COM 개체를 사용하는 것은 비교적 간단하지만 고유한 COM 개체를 작성하는 것에는 더 높은 수준의 지식이 필요합니다.Using COM objects from C++ desktop applications is relatively straightforward, but writing your own COM object is more advanced. ATL(액티브 템플릿 라이브러리)은 COM 개발을 간소화하는 매크로 및 도우미 함수를 제공합니다.The Active Template Library (ATL) provides macros and helper functions that simplify COM development. 자세한 내용은 ATL COM 데스크톱 구성 요소를 참조하세요.For more information, see ATL COM desktop components.

유니버설 Windows 플랫폼 앱Universal Windows Platform apps

유니버설 Windows 플랫폼(UWP)은 최신 Windows API입니다.The Universal Windows Platform (UWP) is the modern Windows API. UWP 응용 프로그램은 Windows 10이 설치된 장치라면 모두 실행 가능하며 사용자 인터페이스에 XAML을 사용하고, 터치 동작을 완전하게 지원합니다.UWP apps run on any Windows 10 device, use XAML for the user-interface, and are fully touch-enabled. UWP에 대한 자세한 내용은 유니버설 Windows 플랫폼(UWP) 앱이란?Windows 유니버설 앱 가이드를 참조하세요.For more information about UWP, see What's a Universal Windows Platform (UWP) app? and Guide to Windows Universal Apps.

UWP에 C++ 대 한 원래 지원은 (1) C++/cx, 구문 확장이 C++ 포함 된 언어 또는 (2) 표준 C++ 및 COM을 기반으로 하는 WRL (Windows 런타임 라이브러리)로 구성 되었습니다.The original C++ support for UWP consisted of (1) C++/CX, a dialect of C++ with syntax extensions, or (2) the Windows Runtime Library (WRL), which is based on standard C++ and COM. C++/CX와 WRL은 계속 사용할 수 있지만,Both C++/CX and WRL are still supported. 새 프로젝트의 경우 표준을 C++ 기반으로 하 고 더 빠른 성능을 제공 하는 C++/winrt를 사용 하는 것이 좋습니다.For new projects, we recommend C++/WinRT, which is entirely based on standard C++ and provides faster performance.

데스크톱 브리지Desktop Bridge

Windows 10에서는 기존 데스크톱 응용 프로그램 또는 COM 개체를 UWP 앱으로 패키지하고, 터치와 같은 UWP 기능을 추가하거나, 최신 Windows API 집합에서 API를 호출할 수 있습니다.In Windows 10, you can package your existing desktop application or COM object as a UWP app, and add UWP features such as touch, or call APIs from the modern Windows API set. 또한 Visual Studio의 데스크톱 솔루션에 UWP 응용 프로그램을 추가하고 단일 패키지로 함께 패키지화하고 Windows API를 사용하여 UWP 응용 프로그램 간 통신이 가능합니다.You can also add a UWP app to a desktop solution in Visual Studio, and package them together in a single package and use Windows APIs to communicate between them.

Visual Studio 2017 버전 15.4 이상에서는 기존 데스크톱 응용 프로그램을 패키지하는 작업을 크게 간소화할 수 있도록 Windows 응용 프로그램 패키지 프로젝트를 만들 수 있습니다.Visual Studio 2017 version 15.4 and later lets you create a Windows Application Package Project to greatly simplify the work of packaging your existing desktop application. 데스크톱 응용 프로그램에서 사용할 수 있는 레지스트리 호출 또는 API에는 몇 가지 제한 사항이 적용됩니다.A few restrictions apply to the registry calls or APIs your desktop application can use. 그러나 대부분의 경우 응용 프로그램 패키지에서 실행되는 동안 유사한 기능을 얻기 위해 대체 코드 경로를 만들 수 있습니다.However, in many cases you can create alternate code paths to achieve similar functionality while running in an app package. 자세한 내용은 데스크톱 브리지를 참조하세요.For more information, see Desktop Bridge.

게임Games

DirectX 게임은 PC 또는 Xbox에서 실행할 수 있습니다.DirectX games can run on the PC or Xbox. 자세한 내용은 DirectX 그래픽 및 게임을 참조하세요.For more information, see DirectX Graphics and Gaming.

SQL Server 데이터베이스 클라이언트SQL Server database clients

네이티브 코드에서 SQL Server 데이터베이스에 액세스하려면 ODBC 또는 OLE DB를 사용합니다.To access SQL Server databases from native code, use ODBC or OLE DB. 자세한 내용은 SQL Server 네이티브 클라이언트를 참조하세요.For more information, see SQL Server Native Client.

Windows 디바이스 드라이버Windows device drivers

드라이버는 응용 프로그램 및 기타 운영 체제 구성 요소가 액세스할 수 있는 하드웨어 장치의 데이터를 만드는 하위 수준의 구성 요소입니다.Drivers are low-level components that make data from hardware devices accessible to applications and other operating system components. 자세한 내용은 Windows Driver Kit(WDK)을 참조하세요.For more information, see Windows Driver Kit (WDK).

Windows 서비스Windows services

Windows 서비스 는 사용자 상호 작용이 거의 또는 전혀 없이 백그라운드에서 실행할 수 있는 프로그램입니다.A Windows service is a program that can run in the background with little or no user interaction. 이러한 프로그램을 UNIX 시스템의 데몬 이라고 합니다.These programs are called daemons on UNIX systems. 자세한 내용은 서비스를 참조하세요.For more information, see Services.

SDK, 라이브러리 및 헤더 파일SDKs, libraries, and header files

Visual Studio에는 C 런타임 라이브러리(CRT), C++ 표준 라이브러리 및 기타 Microsoft 전용 라이브러리가 포함되어 있습니다.Visual Studio includes the C Runtime Library (CRT), the C++ Standard Library, and other Microsoft-specific libraries. 이러한 라이브러리에 대 한 헤더 파일을 포함 하는 대부분의 포함 폴더는 Visual Studio 설치 디렉터리의 \VC\ 폴더에 있습니다.Most of the include folders that contain header files for these libraries are located in the Visual Studio installation directory under the \VC\ folder. Windows 및 CRT 헤더 파일은 Windows SDK 설치 폴더에 있습니다.The Windows and CRT header files are found in the Windows SDK installation folder.

vcpkg 패키지 관리자를 사용하면 Windows 용 수백 개의 타사 오픈 소스 라이브러리를 편리하게 설치할 수 있습니다.The Vcpkg package manager lets you conveniently install hundreds of third-party open-source libraries for Windows.

Microsoft 라이브러리에는 다음이 포함됩니다.The Microsoft libraries include:

  • Microsoft Foundation Classes (MFC): 단추, 목록 상자, 트리 뷰 및 기타 컨트롤을 포함 하는 다양 한 사용자 인터페이스가 있는 일반적인 Windows 프로그램, 특히 엔터프라이즈 응용 프로그램을 만들기 위한 개체 지향 프레임 워크입니다.Microsoft Foundation Classes (MFC): An object-oriented framework for creating traditional Windows programs—especially enterprise applications—that have rich user interfaces that feature buttons, list boxes, tree views, and other controls. 자세한 내용은 MFC 데스크톱 응용 프로그램을 참조하세요.For more information, see MFC Desktop Applications.

  • ATL (액티브 템플릿 라이브러리): COM 구성 요소를 만들기 위한 강력한 도우미 라이브러리입니다.Active Template Library (ATL): A powerful helper library for creating COM components. 자세한 내용은 ATL COM 데스크톱 구성요소를 참조하세요.For more information, see ATL COM Desktop Components.

  • C++AMP (C++ 대형 병렬 처리 가속화): GPU에서 고성능 일반 계산 작업을 수행할 수 있도록 하는 라이브러리입니다.C++ AMP (C++ Accelerated Massive Parallelism): A library that enables high-performance general computational work on the GPU. 자세한 내용은 C++ AMP(C++ Accelerated Massive Parallelism)를 참조하세요.For more information, see C++ AMP (C++ Accelerated Massive Parallelism).

  • 동시성 런타임: 다중 코어 및 다중 코어 장치에 대 한 병렬 및 비동기 프로그래밍 작업을 간소화 하는 라이브러리입니다.Concurrency Runtime: A library that simplifies the work of parallel and asynchronous programming for multicore and many-core devices. 자세한 내용은 동시성 런타임을 참조하세요.For more information, see Concurrency Runtime.

많은 Windows 프로그래밍 시나리오에는 Windows 운영 체제 구성 요소에 액세스할 수 있는 헤더 파일을 포함하는 Windows SDK도 필요합니다.Many Windows programming scenarios also require the Windows SDK, which includes the header files that enable access to the Windows operating system components. 기본적으로 Visual Studio는 유니버설 Windows 앱을 개발할 수 있도록 하는 C++ 데스크톱 워크로드의 구성 요소로 Windows SDK를 설치합니다.By default, Visual Studio installs the Windows SDK as a component of the C++ Desktop workload, which enables development of Universal Windows apps. UWP 앱을 개발하려면 Windows 10 버전의 Windows SDK가 필요합니다.To develop UWP apps, you need the Windows 10 version of the Windows SDK. 자세한 내용은 Windows 10 SDK를 참조하세요.For information, see Windows 10 SDK. (이전 버전 Windows의 Windows SDK에 대한 자세한 내용은 Windows SDK 아카이브를 참조하세요.)(For more information about the Windows SDKs for earlier versions of Windows, see the Windows SDK archive).

Program Files (x86) \windows kit는 설치한 모든 버전의 Windows SDK에 대 한 기본 위치입니다.Program Files (x86)\Windows Kits is the default location for all versions of the Windows SDK that you've installed.

Xbox, Azure 등 다른 플랫폼은 설치가 필요한 고유의 SDK가 있습니다.Other platforms such as Xbox and Azure have their own SDKs that you may have to install. 자세한 내용은 DirectX 개발자 센터 및 Azure 개발자 센터를 참조하세요.For more information, see the DirectX Developer Center and the Azure Developer Center.

개발 도구Development Tools

Visual Studio는 네이티브 코드에 대한 강력한 디버거, 정적 분석 도구, 그래픽 디버깅 도구, 완벽한 기능을 갖춘 코드 편집기, 유닛 테스트 지원 및 다른 많은 도구와 유틸리티를 포함합니다.Visual Studio includes a powerful debugger for native code, static analysis tools, graphics debugging tools, a full-featured code editor, support for unit tests, and many other tools and utilities. 자세한 내용은 Visual Studio를 사용하여 개발 시작visual Studio C++의 개발 개요를 참조하세요.For more information, see Get started developing with Visual Studio, and Overview of C++ development in Visual Studio.

단원 내용In this section

제목Title 설명Description
연습: 표준 C++ 프로그램 만들기Walkthrough: Creating a Standard C++ Program Windows 콘솔 응용 프로그램을 만듭니다.Create a Windows console application.
연습: Windows 데스크톱 애플리케이션 만들기(C++)Walkthrough: Creating Windows Desktop Applications (C++) 네이티브 Windows 데스크톱 응용 프로그램을 만듭니다.Create a native Windows desktop application.
Windows 데스크톱 마법사Windows Desktop Wizard 마법사를 사용하여 새 Windows 프로젝트를 만듭니다.Use the wizard to create new Windows projects.
ATL(액티브 템플릿 라이브러리)Active Template Library (ATL) C++에서 COM 구성 요소를 만들려면 ATL 라이브러리를 사용합니다.Use the ATL library to create COM components in C++.
MFC(Microsoft Foundation Class)Microsoft Foundation Classes (MFC) MFC를 사용하여 대화상자 및 컨트롤이 포함된 크고 작은 Windows 응용 프로그램을 만드는 방법입니다.Use MFC to create large or small Windows applications with dialogs and controls
ATL 및 MFC 공유 클래스ATL and MFC Shared Classes CString 같은 ATL 및 MFC에서 공유하는 클래스를 사용합니다.Use classes such as CString that are shared in ATL and MFC.
데이터 액세스Data Access OLE DB 및 ODBCOLE DB and ODBC
텍스트 및 문자열Text and Strings Windows의 다양 한 문자열 형식입니다.Various string types on Windows.
DirectX를 사용하여 게임을 만들기 위한 리소스Resources for Creating a Game Using DirectX
방법: Windows 데스크톱 애플리케이션에서 Windows 10 SDK 사용How to: Use the Windows 10 SDK in a Windows Desktop Application Windows SDKWindows SDK
리소스 파일 작업Working with Resource Files 데스크톱 응용 프로그램에 이미지, 아이콘, 문자열 테이블 및 기타 리소스를 추가 하는 방법입니다.How to add images, icons, string tables, and other resources to a desktop application.
DirectX (C++)를 사용하여 게임을 만들기 위한 리소스Resources for Creating a Game Using DirectX (C++) C++을 이용한 게임 만들기에 대한 콘텐츠가 연결되어 있습니다.Links to content for creating games in C++.
방법: Windows 데스크톱 애플리케이션에서 Windows 10 SDK 사용How to: Use the Windows 10 SDK in a Windows Desktop Application Windows 10 SDK를 사용하여 빌드할 프로젝트를 설정하는 단계를 설명합니다.Contains steps for setting up your project to build using the Windows 10 SDK.
네이티브 데스크톱 애플리케이션 배포Deploying Native Desktop Applications Windows에서 네이티브 응용 프로그램을 배포 합니다.Deploy native applications on Windows.
제목Title DescriptionDescription
Visual Studio의 C++C++ in Visual Studio Visual C++ 개발자 콘텐츠에 대한 부모 항목입니다.Parent topic for Visual C++ developer content.
C++/CLI를 사용한 .NET 개발.NET Development with C++/CLI .NET 응용 프로그램 및 구성 요소와의 상호운용이 가능하도록 네이티브 C++ 라이브러리의 래퍼를 만듭니다.Create wrappers for native C++ libraries that enable it to communication with .NET applications and components.
.NET 및 UWP용 구성 요소 확장Component Extensions for .NET and UWP C++/CX 및 C++/CLI에서 공유하는 구문요소에 대한 참조입니다.Reference for syntax elements shared by C++/CX and C++/CLI.
유니버설 Windows 앱(C++)Universal Windows Apps (C++) C++/CX 또는 Windows 런타임 템플릿 라이브러리(WRL)를 이용한 UWP 응용 프로그램 개발하기.Write UWP applications using C++/CX or Windows Runtime Template Library (WRL).
COM 및 .NET에 대한 C++ 특성C++ Attributes for COM and .NET .NET 또는 COM을 사용할 때의 Windows 전용 프로그래밍용 비표준 특성Non-standard attributes for Windows-only programming using .NET or COM.