맨위로가기

윈도우 런타임

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

윈도우 런타임(WinRT)은 2011년 공개된 객체 지향 API로, 윈도우 8부터 유니버설 윈도우 플랫폼(UWP)에 이르기까지 다양한 윈도우 운영체제에서 사용된다. C++, .NET (C#, VB.NET), JavaScript 등 여러 프로그래밍 언어를 지원하며, 샌드박스 환경에서 실행되어 보안을 강화한다. WinRT는 메타데이터를 기반으로 하며, C++/WinRT, C++/CX, .NET, JavaScript 등 다양한 프로그래밍 인터페이스를 제공한다. 또한, WinRT는 기본 데이터 형식, 문자열, 구조체, 참조, 배열, 이벤트, 컬렉션, 메서드 오버로딩, 비동기성 등 다양한 기능과 규칙을 가지고 있다.

더 읽어볼만한 페이지

  • 윈도우 API - 유니버설 윈도우 플랫폼
    유니버설 윈도우 플랫폼(UWP)은 마이크로소프트에서 개발한 애플리케이션 모델로, Windows 10, 11 등 다양한 기기에서 실행되는 앱 개발을 위한 통합 플랫폼이며, Visual Studio를 통해 개발되고 XAML Islands를 통해 기존 WinAPI 기반 애플리케이션에서도 활용 가능하다.
  • 윈도우 API - WinG
    WinG는 윈도우 3.x의 그래픽 성능 향상을 위해 개발된 기술로, DirectX로 발전하는 기반이 되었으며 한국 게임 산업에도 영향을 미쳤다.
  • 닷넷 프레임워크 - 파워셸
    파워셸은 마이크로소프트에서 개발한 작업 자동화 솔루션으로, 명령줄 셸과 스크립트 언어의 기능을 결합하여 윈도우 시스템 관리를 위해 설계되었으며, .NET 프레임워크 기반의 객체 지향적 특징을 갖고 다양한 플랫폼에서 자동화 스크립트 작성 및 실행, 시스템 구성 관리 등에 활용된다.
  • 닷넷 프레임워크 - 유니버설 윈도우 플랫폼
    유니버설 윈도우 플랫폼(UWP)은 마이크로소프트에서 개발한 애플리케이션 모델로, Windows 10, 11 등 다양한 기기에서 실행되는 앱 개발을 위한 통합 플랫폼이며, Visual Studio를 통해 개발되고 XAML Islands를 통해 기존 WinAPI 기반 애플리케이션에서도 활용 가능하다.
  • 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 브루클린 미술관
    브루클린 미술관은 1823년 브루클린 견습생 도서관으로 시작하여 현재 약 50만 점의 소장품을 보유한 뉴욕 브루클린 소재의 미술관으로, 다양한 분야의 예술 작품을 전시하며 특히 아프리카 미술과 여성주의 미술에 대한 기여가 크다.
  • 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 광주지방기상청
    광주지방기상청은 광주광역시와 전라남도 지역의 기상 예보, 특보, 관측, 기후 정보 제공 등의 업무를 수행하는 기상청 소속 기관으로, 1949년 광주측후소로 설치되어 1992년 광주지방기상청으로 개편되었으며, 기획운영과, 예보과, 관측과, 기후서비스과와 전주기상지청, 목포기상대를 두고 있다.
윈도우 런타임 - [IT 관련 정보]에 관한 문서
개요
이름윈도우 런타임
다른 이름WinRT
개발마이크로소프트
출시일2012년 10월 26일
프로그래밍 언어C++
엔진컴포넌트 오브젝트 모델
운영체제마이크로소프트 윈도우
장르애플리케이션 바이너리 인터페이스
애플리케이션 프로그래밍 인터페이스
FFI (Foreign Function Interface)
웹사이트윈도우 앱 개발 문서 (영문)
상세 정보
설명플랫폼 독립적인 컴포넌트 및 애플리케이션 아키텍처
기반 기술COM (Component Object Model)
대체 대상Win32 API

2. 역사

WinRT는 2011년 9월 12일 마이크로소프트 빌드 컨퍼런스에서 공개되었으며, 윈도우 8 개발자 프리뷰에 포함되었다.[46] 비주얼 스튜디오 2012는 윈도우 8용 WinRT 개발 환경을 최초로 지원했으며, 이후 비주얼 스튜디오 2013은 윈도우 8.1용, 비주얼 스튜디오 2015는 윈도우 10 (유니버설 윈도우 플랫폼)용 WinRT 개발 환경을 제공했다.[47]

2. 1. 윈도우 폰 런타임

윈도우 폰 8은 "윈도우 폰 런타임"을 통해 윈도우 런타임 구성 요소를 개발하고 사용할 수 있는 제한적인 지원을 제공했다. 핵심 운영 체제 기능을 처리하는 윈도우 8의 많은 윈도우 런타임 API가 윈도우 폰 8로 이식되었다.[33] C++/CX와 DirectX를 사용하여 네이티브 게임을 개발하는 지원 기능이 게임 개발 업계의 요청에 따라 추가되었다.

그러나 Windows Phone XAML 프레임워크는 하위 호환성을 위해 윈도우 폰 7과 마찬가지로 마이크로소프트 실버라이트 프레임워크를 기반으로 했다. 따라서 C++/CX에서는 XAML 개발이 불가능했다. HTML5 또는 WinJS를 사용한 개발은 윈도우 폰 8에서 지원되지 않았다.

윈도우 폰 8.1은 '윈도우 폰 런타임'이라고 불리는 윈도우 런타임 버전을 사용하며, 윈도우 8.1과 통합되었다. 이는 C# 및 VB.NET으로 응용 프로그램을 개발하고 C++/CX로 윈도우 런타임 구성 요소를 개발할 수 있게 해준다.[32] 이 릴리스는 WinRT XAML, C++/CX, 그리고 HTML5-자바스크립트의 언어 바인딩을 포함한 완벽한 윈도우 런타임 API를 플랫폼에 제공한다. 또한 8.1 버전의 윈도우 폰과 윈도우 간에 앱이 코드를 공유할 수 있도록 하는 "유니버설 앱"이라는 프로젝트 유형도 있다.

Windows Phone 8 실버라이트 프레임워크는 업데이트되어 윈도우 런타임의 새로운 기능 중 일부를 활용할 수 있다.

윈도우 폰 런타임은 이전에 실버라이트 XAP을 사용하던 것과 달리 윈도우 8의 AppX 패키지 형식을 사용한다.

3. 기술

C++로 구현된 윈도우 런타임(WinRT)은 객체 지향 프로그래밍 설계를 기반으로 하는 현대적인 API이다. 이전 버전인 Win32 API는 C 언어 인터페이스를 가진 API로 설계되어 C/C++ 양쪽에서 사용할 수 있었다. WinRT는 COM을 기반으로 한 네이티브(언매니지드) API이며, COM처럼 여러 언어에서 사용할 수 있다.

기존 COM과의 차이점 중 하나는 WinRT API의 정의가 ".winmd" 파일에 저장되어 있고, ECMA 335영어 메타 형식으로 인코딩되어 있다는 점이다. 같은 형식은 약간의 수정을 거쳐 .NET(.NET)에서도 사용된다[38]. 이 공통 메타 형식으로 인해 기존의 P/Invoke(P/Invoke)와 비교하여 매우 적은 오버헤드로 WinRT를 .NET 애플리케이션에서 호출할 수 있게 된다. 또한 기존 COM 컴포넌트를 .NET 언어에서 직접 사용하려면 .NET용 COM 타입 라이브러리를 가져오거나, COM 인터페이스 정의를 .NET 언어로 명시적으로 작성하여 래퍼를 만들어야 했다[39]. WinRT에서는 래퍼를 만들지 않고 WinRT 컴포넌트를 .NET 언어에서 직접 사용할 수 있으며, 반대로 .NET 언어로 작성된 WinRT 컴포넌트를 C++/CX에서 직접 사용할 수도 있다. 문법도 더 간단해진다[40].

C++/CX (Component Extensions) 언어는 C++/CLI(C++/CLI)의 문법을 일부 차용했으며, C++로 작성된 기존 COM 프로그래밍보다 적은 글루 코드로 WinRT 컴포넌트를 만들고 사용할 수 있다. 또한, C++/CLI와 비교하여, 순수 C++형(class/struct)과 WinRT형(ref class/ref struct/value class/value struct)이 혼재하는 경우에 가해지는 제약이 거의 없다. 단, C++/CX는 상용할 것이 아니라, 순수한 C++ 언어로 작성된 코드를 WinRT 애플리케이션에서 재사용하기 위해 래핑하는 경우 등, 경계면에서만 사용하는 것이 권장된다[42]. 일반적인(COM 준수 규약이 있는) C++도, Windows Runtime C++ Template Library (WRL)로 보조하여 WinRT 컴포넌트를 프로그래밍할 때 사용할 수 있다[43]. 이후 표준 C++17(C++17)을 기반으로 한 언어 프로젝션으로 C++/WinRT가 개발되어, C++/CX 및 WRL의 대체로 권장되었다[36].

WinRT 컴포넌트는 네이티브, 관리 코드, 스크립팅을 포함하는 여러 언어와 ABI 간의 상호 운용성을 염두에 두고 설계되었다. WinRT 애플리케이션은 샌드박스 내에서 실행된다. 따라서 기존 데스크톱 애플리케이션에 비해 설치 및 작동에 대한 제약이 있지만, 보안 측면에서의 안전성은 향상된다. WinRT API는 Win32 API 서브세트를 기반으로 구축되었으며, Win32 API의 대체라기보다는 고수준 래퍼라고 할 수 있다[48].

3. 1. 메타데이터

WinRT 메타데이터는 WinRT API를 설명한다. 이는 여러 프로그래밍 언어에서 공유할 수 있는 객체 지향 코드를 작성할 수 있게 해주는 프로그래밍 모델을 정의하며, 반사 프로그래밍(리플렉션)과 같은 서비스를 가능하게 한다.

마이크로소프트(Microsoft)의 C++(C++) 전문가인 허브 서터(Herb Sutter)는 2011년 빌드 컨퍼런스에서 WinRT 메타데이터가 CLI 메타데이터와 동일한 형식이라고 설명했다.[10] 네이티브 코드(즉, 프로세서별 기계어 코드)는 메타데이터를 포함할 수 없으므로 일반적인 CLI 어셈블리처럼 반사될 수 있는 별도의 메타데이터 파일에 저장된다.[22] CLI 메타데이터와 동일한 형식이기 때문에 WinRT API는 관리형 CLI 언어에서 .NET API인 것처럼 사용할 수 있다.

WinRT API의 정의는 ".winmd" 파일에 저장되어 있고, ECMA 335영어 메타 형식으로 인코딩되어 있다. 같은 형식은 약간의 수정을 거쳐 .NET(.NET)에서도 사용된다.[38] 이 공통 메타 형식으로 인해 기존의 P/Invoke(P/Invoke)와 비교하여 매우 적은 오버헤드로 WinRT를 .NET 애플리케이션에서 호출할 수 있게 된다. 또한 기존 COM 컴포넌트를 .NET 언어에서 직접 사용하려면 .NET용 COM 타입 라이브러리를 가져오거나, COM 인터페이스 정의를 .NET 언어로 명시적으로 작성하여 래퍼를 만들어야 했다.[39] WinRT에서는 그럴 필요 없이 래퍼를 만들지 않고 WinRT 컴포넌트를 .NET 언어에서 직접 사용할 수 있게 된다. 또한 그 반대도 마찬가지이며, .NET 언어로 작성된 WinRT 컴포넌트를 C++/CX에서 직접 사용할 수도 있다. 문법도 더 간단해진다.[40]

WinRT 메타데이터는 WinRT에 대해 작성된 코드를 보충한다. 프로그래밍 언어에 관계없이 객체 지향적인 프로그래밍 모델을 정의하고, 리플렉션 등의 기능도 제공한다.

마이크로소프트의 C++ 전문가인 Herb Sutter영어는 BUILD 컨퍼런스에서 WinRT 메타데이터는 .NET 메타데이터와 동일하다고 설명했다.[42] 네이티브 코드에는 메타데이터를 포함할 수 없으며, 별도로 WINMD 파일로 저장된다. 이 경우에도 리플렉션은 .NET 어셈블리와 마찬가지로 동작한다.[49]

.NET 메타데이터와 동일하기 때문에, WinRT에 대해 네이티브 언어로 개발된 코드는 .NET상의 프로그래밍 언어에서도 사용할 수 있다.

3. 2. 형식 시스템

WinRT는 메타데이터를 기반으로 한 풍부한 객체 지향 클래스 기반의 타입 시스템을 갖추고 있다. 이는 .NET 프레임워크의 구조와 상응하는 클래스, 메서드, 프로퍼티, 대리자, 이벤트를 지원한다.

COM에 비해 WinRT가 추가적으로 제공하는 주요 기능 중 하나는 크로스 ABI에서 .NET 스타일의 제네릭 프로그래밍이다. 인터페이스와 대리자만 제네릭으로 사용할 수 있으며, 런타임 클래스와 해당 클래스의 메서드는 제네릭으로 사용할 수 없다. 제네릭 인터페이스는 매개변수화된 인터페이스라고도 한다. C++/CX에서는 `template` 키워드와 매우 유사한 구문을 사용하여 `generic` 키워드로 선언된다. WinRT 클래스(참조 클래스)는 C++ 템플릿을 사용하여 제네릭화할 수도 있지만, 템플릿 인스턴스화만 .winmd 메타데이터로 내보낼 수 있다. 반면 WinRT 제네릭은 메타데이터에서 제네릭 속성을 유지한다. WinRT는 또한 C++ 표준 라이브러리에 있는 인터페이스와 유사한 제네릭 컨테이너 인터페이스 집합을 제공하며, 언어는 상호 변환 기능을 제공한다. .NET 언어(예: C# 및 VB) 및 JavaScript에서 WinRT 컬렉션을 사용하는 것은 C++보다 투명하며, 자연스러운 동등물로의 자동 매핑이 백그라운드에서 발생한다. 관리되는 언어로 WinRT 구성 요소를 작성할 때는 일부 추가적인 COM 스타일 규칙을 따라야 한다. 예를 들어 .NET 프레임워크 컬렉션 유형은 반환 유형으로 선언할 수 없으며, 해당 컬렉션이 구현하는 WinRT 인터페이스만 구성 요소 경계에서 사용할 수 있다.

3. 2. 1. WinRT 구성 요소

WinRT를 대상으로 컴파일된 클래스를 ''WinRT 컴포넌트''라고 한다. 이러한 컴포넌트는 지원되는 모든 언어 및 플랫폼에서 작성할 수 있는 클래스이다. 핵심은 메타데이터인데, 이 메타데이터는 다른 모든 WinRT 언어에서 컴포넌트와 상호 작용할 수 있게 해준다.[23] 런타임은 .NET Framework로 빌드된 WinRT 컴포넌트가 정의된 인터페이스 유형 또는 .NET 형식 인터페이스를 사용하도록 요구하며, 이는 자동으로 첫 번째 이름에 매핑된다. XAML 클래스를 제외하고 관리형 WinRT 컴포넌트에서는 상속이 지원되지 않는다.[23]

3. 3. 프로그래밍 인터페이스

WinRT 런타임을 대상으로 하는 프로그램과 라이브러리는 여러 플랫폼 및 프로그래밍 언어에서 생성 및 사용될 수 있다. 특히 C/C++ (WinRT 개념을 지원하는 언어 확장 기능 또는 표준 C++ 코드를 작성할 수 있는 템플릿 라이브러리 사용), .NET (C# 및 VB.NET), 그리고 자바스크립트가 지원된다. 이는 메타데이터를 통해 가능하며, WinRT에서는 언어 바인딩을 '언어 프로젝션'이라고 부른다.

WinRT는 C++(C++)로 구현된 객체 지향 설계를 기반으로 하며, 이전 버전인 Win32 API(Win32 API)는 C 언어(C 언어) 인터페이스를 가진 API로 설계되어 C/C++ 양쪽에서 사용할 수 있었다. WinRT는 COM을 기반으로 한 네이티브(언매니지드) API이며, COM처럼 여러 언어에서 사용할 수 있다.

기존 COM과의 차이점 중 하나는 WinRT API 정의가 ".winmd" 파일에 저장되며, 메타 형식으로 인코딩된다는 점이다. 이 형식은 약간의 수정을 거쳐 .NET(.NET)에서도 사용된다[38]. 이 공통 메타 형식으로 인해 P/Invoke(P/Invoke)에 비해 적은 오버헤드로 WinRT를 .NET 애플리케이션에서 호출할 수 있다. 기존 COM 컴포넌트를 .NET 언어에서 직접 사용하려면 .NET용 COM 타입 라이브러리를 가져오거나 COM 인터페이스 정의를 .NET 언어로 명시적으로 작성하여 래퍼를 만들어야 했지만[39], WinRT에서는 래퍼 없이 WinRT 컴포넌트를 .NET 언어에서 직접 사용할 수 있다. 반대로 .NET 언어로 작성된 WinRT 컴포넌트를 C++/CX에서 직접 사용하는 것도 가능하다. 문법도 더 간단해졌다[40].

C++/CX (Component Extensions) 언어는 C++/CLI(C++/CLI) 문법을 일부 차용하여 C++로 작성된 기존 COM 프로그래밍보다 적은 글루 코드로 WinRT 컴포넌트를 만들고 사용할 수 있도록 했다. C++/CLI와 비교하면 순수 C++형(class/struct)과 WinRT형(ref class/ref struct/value class/value struct)이 혼재하는 경우에 가해지는 제약이 거의 없다. C++/CX는 경계면에서만 사용하는 것이 권장된다[42]. 일반적인 (COM 준수 규약이 있는) C++도 Windows Runtime C++ Template Library (WRL)를 통해 WinRT 컴포넌트 프로그래밍에 사용될 수 있다[43]. WRL은 COM용 ATL(ATL)과 유사하지만[44] 일부 기능이 생략되었다[45]. 이후 표준 C++17(C++17) 기반 언어 프로젝션인 C++/WinRT가 개발되어 C++/CX 및 WRL을 대체하게 되었다[36].

기존 데스크톱 애플리케이션의 경우 C# 코드에서 C++ 코드를 재사용하거나, 그 반대의 경우 P/Invoke, COM 상호 운용 또는 매니지드 언어인 C++/CLI를 통한 래퍼를 거쳐야 했지만, WinRT에서는 네이티브 확장인 C++/CX 또는 C++/WinRT를 통해 상호 운용 가능한 컴포넌트를 생성 및 사용할 수 있어 명시적으로 P/Invoke나 매니지드 언어를 거칠 필요가 없다.

WinRT 컴포넌트는 네이티브, 관리 코드, 스크립팅을 포함하는 여러 언어와 ABI 간의 상호 운용성을 고려하여 설계되었다. WinRT 애플리케이션은 샌드박스 내에서 실행되어 보안 측면에서 안전성이 향상된다. WinRT API는 Win32 API 서브세트를 기반으로 구축되었으며, Win32 API의 대체라기보다는 고수준 래퍼라고 할 수 있다[48]. 이는 내부 구현에 Win32 API를 이용하는 Microsoft .NET Framework에서 사용되는 것과 같은 방식이다.

3. 3. 1. C++ (C++/WinRT, C++/CX, WRL)

C++는 WinRT 플랫폼에서 "일급 시민"이다. 윈도우 10 버전 1803부터 Windows SDK에는 C++/WinRT가 포함되어 있다. C++/WinRT는 헤더 파일 기반 라이브러리로 구현되고 최신 Windows API에 대한 일급 액세스를 제공하도록 설계된 Windows 런타임(WinRT) API용 완전한 표준 최신 C++17 언어 투영이다. C++/WinRT를 사용하면 모든 표준을 준수하는 C++17 컴파일러를 사용하여 Windows 런타임 API를 작성하고 사용할 수 있다. WinRT는 네이티브 플랫폼이며 모든 네이티브(및 표준) C++ 코드를 지원하므로 C++ 개발자는 기존 네이티브 C/C++ 라이브러리를 재사용할 수 있다. C++/WinRT를 사용하면 언어 확장이 없다.

C++에서 WinRT를 사용하기 위한 두 가지 레거시 옵션이 더 있다. 하나는 ATL 스타일의 템플릿 라이브러리인 Windows 런타임 C++ 템플릿 라이브러리(WRL)(WTL과 유사)이고, 다른 하나는 C++/CX(Component Extensions가 있는 C++)로 C++/CLI와 유사하다.[24] Microsoft의 내부 사용 요구 사항으로 인해 WRL은 예외가 없으며, 이는 반환 값 규율이 COM과 마찬가지로 HRESULT 기반임을 의미한다.[25] 반면에 C++/CX는 오류 검사를 수행하고 필요에 따라 예외를 발생시키는 코드로 WinRT에 대한 호출을 래핑한다.[26]

C++/CX에는 플랫폼 및 해당 유형 시스템과의 통합을 가능하게 하는 몇 가지 확장이 있다. 구문은 C++/CLI의 구문과 유사하지만 런타임과 통합되는 네이티브(비표준) 코드와 메타데이터를 생성한다. 예를 들어, WinRT 개체는 C++/CLI의 `gcnew`에 해당하는 `ref new`로 할당할 수 있다. 모자 연산자 `^`는 해당 의미를 유지하지만, 호출자와 피호출자가 모두 C++로 작성되고 동일한 프로세스에서 실행되는 경우 모자 참조는 단순히 가상 메서드 테이블(vtable, VMT)에 대한 vptr에 대한 포인터이다.[26]

전통적인 C++ COM 프로그래밍과 관련하여 C++/CX와 함께 .NET에서 영감을 받은 부분 클래스가 있다. 이를 통해 인스턴스 WinRT XAML 코드를 도구를 사용하여 C++ 코드로 변환한 다음, 사람이 작성한 코드와 결합하여 클래스의 기계 생성 부분과 사람이 편집한 부분을 다른 파일로 깨끗하게 분리하면서 완전한 클래스를 생성할 수 있다.

3. 3. 2. .NET

.NET Framework와 공용 언어 런타임(CLR)은 WinRT에 통합되어 있으며[38], 메타데이터 형식 및 라이브러리를 통해 해당 생태계에 영향을 미치고 표준을 설정했다. .NET 언어를 사용하는 WinRT 응용 프로그램은 XAML 기반 WinUI를 사용하며, 주로 C#, VB.NET으로 작성된다.[27][28]

3. 3. 3. JavaScript

WinRT 애플리케이션은 HTML과 JavaScript를 코드 비하인드 방식으로 사용하여 코딩할 수 있으며, 트라이던트 웹 브라우저 엔진과 차크라 JavaScript 엔진을 사용하여 실행된다.[4] 이 두 엔진은 인터넷 익스플로러에서도 사용된다. JavaScript로 WinRT 앱을 코딩할 때, 해당 기능은 JavaScript 명명 규칙을 따르도록 적용되며, 네임스페이스는 JavaScript 객체에 매핑된다.

3. 3. 4. 기타 언어

마이크로소프트C++ 외의 다른 언어로 WinRT API를 투영하는 과정에 있다. 한 예로 러스트로 작성된 프로그램이 WinRT API를 사용하고 제작할 수 있도록 하는 인터페이스인 Rust/WinRT가 있다.[29] Rust/WinRT는 기존의 Windows 데스크톱과 UWP 앱 모델을 조화시키려는 마이크로소프트의 노력의 일환인 Windows 앱 SDK(이전의 Project Reunion)의 일부이다.[30]

3. 3. 5. 브리지

유니버설 Windows 플랫폼(UWP) 도입으로, 다른 플랫폼용으로 개발된 프로그램을 쉽게 이식하여 UWP 기능을 활용할 수 있도록 하는 많은 API 브리지가 제공되었다. 마이크로소프트는 안드로이드 (2016년부터 중단), iOS (Cocoa Touch), 프로그레시브 웹 앱, 실버라이트, 그리고 기존의 Windows 데스크톱 앱 (Windows 앱 SDK에서 MSIX 패키징 사용)에 대한 브리지를 제공했다.

3. 4. API

WinRT는 C++로 구현되었으며, 객체 지향적 설계를 기반으로 한다.[4] 이전 버전인 Win32 API는 대부분 C 언어로 작성되었다.[5] WinRT는 COM을 기반으로 하는 비관리 코드 ABI이며, COM과 마찬가지로 여러 언어에서 인터페이스를 사용할 수 있다. API 정의는 `.winmd` 파일에 저장되며, .NET에서도 일부 수정을 거쳐 사용되는 메타데이터 (CLI) 형식으로 인코딩되어 있다. 네이티브 코드로 구현된 WinRT 구성 요소의 경우, 메타데이터 파일에는 메서드, 클래스, 인터페이스 및 열거형의 정의만 포함되며, 구현은 별도의 DLL에서 제공된다.[6][7][8] 이러한 공통 메타데이터 형식 덕분에 P/Invoke보다 간단한 구문을 사용하여 .NET 앱에서 WinRT API를 더 쉽게 사용할 수 있다.[9]

C++/CX (Component Extensions) 언어는 C++에서 기존 COM 프로그래밍에 비해 보이는 글루 코드를 줄이고, C++/CLI에 비해 유형 혼합에 대한 제한을 덜 부과하여 WinRT 구성 요소를 작성하고 사용하기 위해 도입되었다. C++/CX의 Component Extensions는 API 경계에서만 사용하는 것이 권장된다.[10] 일반 C++ (COM 특정 규율 사용)도 WinRT 구성 요소 프로그래밍에 사용될 수 있으며, ATL이 COM에 제공하는 것과 유사한 Windows Runtime C++ Template Library (WRL)의 도움을 받는다.[11][12] 2019년, 마이크로소프트는 C++/WinRT 헤더 라이브러리를 선호하여 C++/CX를 더 이상 사용하지 않도록 했다.[13]

대부분의 WinRT 응용 프로그램은 샌드박스 내에서 실행되며, 중요한 OS 기능 및 기본 하드웨어에 접근하려면 명시적인 사용자 승인이 필요하다. 기본적으로 파일 접근은 문서 또는 사진 디렉토리와 같은 미리 결정된 위치로 제한된다.[14]

WinRT 응용 프로그램은 .appx 및 나중에 .msix 파일 형식으로 패키지되며, Open Packaging Conventions을 기반으로 하고 추가된 XML 파일을 포함하는 ZIP 형식을 사용한다.[15] WinRT 응용 프로그램은 주로 Microsoft Store를 통해 배포된다. 초기에는 WinRT 앱을 사이드로딩 방식으로 윈도우 도메인에 속하거나 마이크로소프트에서 얻은 특수 활성화 키가 장착된 윈도우 8 또는 RT 시스템에서 윈도우 스토어 외부에서만 설치할 수 있었다.[16][17][18][19] 그러나 이러한 제한은 윈도우 10 11월 업데이트에서 해제되어, 사용자가 설정을 활성화하여 신뢰할 수 있는 인증서로 서명된 모든 앱을 자유롭게 사이드로딩할 수 있게 되었다.[20]

Win32와 달리, 그리고 .NET Framework 4.5와 유사하게, 완료하는 데 상당한 시간이 소요될 것으로 예상되는 대부분의 API는 비동기 방식으로 구현된다. 윈도우 런타임 비동기 함수를 호출하면 작업이 다른 스레드 또는 프로세스에서 시작되고 함수가 즉시 반환되어 앱이 결과를 기다리는 동안 다른 작업을 수행할 수 있도록 한다.[21] 각 언어는 비동기 API를 사용하는 자체적인 방식을 제공한다. 비동기 접근이 필요한 내장 API의 일부에는 화면 메시지 및 대화 상자, 파일 액세스, 인터넷 연결, 소켓, 스트림, 장치 및 서비스, 캘린더, 연락처 및 약속이 포함된다.

3. 4. 1. Runtime 클래스

윈도우 런타임 클래스는 XAML 파서부터 카메라 기능에 이르기까지 모든 기능에 접근할 수 있도록 해주는 일련의 SDK이다. 이 SDK는 네이티브 C/C++ 라이브러리(비관리 코드)로 구현된다.[1]

3. 4. 2. 명명 규칙

API 구성 요소의 명명 규칙은 카멜 표기법(특히 파스칼 표기법)을 사용하는 .NET 명명 규칙의 영향을 많이 받는다.

3. 4. 3. 제한 사항 및 규칙

WinRT는 다양한 언어로 투사되므로, 기본 데이터 형식에 대한 몇 가지 제한이 있다. 프로그래머는 공개 액세스(메서드 매개변수, 메서드 반환 값, 속성 등)와 함께 사용할 때 이러한 형식의 동작에 주의해야 한다.[31]

형식설명
기본 형식
문자열
구조체
참조
배열
이벤트
컬렉션
메서드 오버로딩
비동기성


4. 서비스

WinRT는 메타데이터, 형 시스템, 프로그래밍 인터페이스 등 다양한 서비스를 제공한다. API 정의는 .winmd 파일에 저장되며, 이는 메타데이터 (CLI)(ECMA 335 메타데이터) 형식으로 인코딩되어 있다.[6][7][8] 이 공통 메타데이터 형식은 P/Invoke보다 간단한 구문을 사용하여 .NET 앱에서 WinRT API를 더 쉽게 사용할 수 있도록 한다.[9]

Win32와 달리, 그리고 .NET Framework 4.5와 유사하게, 완료하는 데 상당한 시간이 소요될 것으로 예상되는(50밀리초 이상) API는 비동기 방식으로 구현된다.[21] 윈도우 런타임 비동기 함수를 호출하면 작업이 다른 스레드 또는 프로세스에서 시작되고 함수가 즉시 반환되어 앱이 결과를 기다리는 동안 다른 작업을 수행할 수 있다.[21] 비동기 접근이 필요한 내장 API에는 화면 메시지 및 대화 상자, 파일 접근, 인터넷 연결, 소켓, 스트림, 장치 및 서비스, 캘린더, 연락처, 약속 등이 있다.

참조

[1] 웹사이트 Windows Runtime is not a Runtime http://yizhang82.dev[...] 2017-03-15
[2] 웹사이트 Design Details of the Windows Runtime http://www.infoq.com[...] 2011-09-21
[3] 웹사이트 Microsoft Build: Windows 8, A Pre-Beta Preview http://www.anandtech[...] 2011-09-13
[4] 서적 WinRT Revealed Apress
[5] 웹사이트 Creating Win32 Applications (C++) http://msdn.microsof[...] Microsoft 2014-01-12
[6] 웹사이트 Windows Metadata (WinMD) files https://docs.microso[...] 2019-07-20
[7] 웹사이트 WinRT demystified http://tirania.org/b[...] Self-published 2011-09-15
[8] 웹사이트 WINMD Files Under the Hood https://www.codeproj[...] 2012-10-15
[9] 웹사이트 What is the COM marshaling overhead in calling the WinRT API from C#? http://social.msdn.m[...] Self-published 2011-09-20
[10] 웹사이트 Using the Windows Runtime from C++ | Build2011 | Channel 9 http://channel9.msdn[...] Channel9.msdn.com 2011-09-14
[11] 웹사이트 Visual C++ and WinRT/Metro - Some fundamentals - CodeProject® http://www.codeproje[...] Codeproject.com 2011-09-29
[12] 웹사이트 Using the Windows Runtime from C++ | Build2011 | Channel 9 http://channel9.msdn[...] Channel9.msdn.com 2011-09-14
[13] 웹사이트 Introduction to C++/WinRT - Windows UWP applications https://docs.microso[...] Microsoft 2022-11-18
[14] 웹사이트 File access permissions - UWP applications https://docs.microso[...]
[15] 웹사이트 Designing a simple and secure app package – APPX http://blogs.msdn.co[...] 2013-12-30
[16] 웹사이트 How to Add and Remove Apps https://technet.micr[...] Microsoft 2012-05-31
[17] 웹사이트 Windows 8: The Metro Mess http://forwardthinki[...] PC Magazine 2012-09-08
[18] 뉴스 Microsoft now using 'Modern UI Style' to refer to Windows 8 'Metro Style' apps https://www.theverge[...] 2012-08-10
[19] 웹사이트 What's a Microsoft Store app? http://msdn.microsof[...] Windows Dev Center 2012-10-01
[20] 웹사이트 What Is Sideloading & How To Sideload Apps On Windows 10? [DETAILS] https://silicophilic[...] 2019-07-27
[21] 웹사이트 Asynchronous programming (Windows Store apps) http://msdn.microsof[...] Microsoft 2014-01-12
[22] 웹사이트 .NET Gets a New Lease of Life http://www.ciprianji[...]
[23] 웹사이트 Using the Windows Runtime from C# and Visual Basic | Build2011 | Channel 9 http://channel9.msdn[...] Channel9.msdn.com 2011-09-14
[24] 웹사이트 Inside the C++/CX Design - Visual C++ Team Blog - Site Home - MSDN Blogs http://blogs.msdn.co[...] Blogs.msdn.com 2011-10-20
[25] 웹사이트 GoingNative 3: The C++/CX Episode with Marian Luparu | C9::GoingNative | Channel 9 http://channel9.msdn[...] Channel9.msdn.com 2011-10-26
[26] 문서 Under the covers with C++ for Metro style apps http://channel9.msdn[...]
[27] 웹사이트 CSWinRT: How to call Windows WinRT APIs from .NET5 applications https://techcommunit[...] 2020-09-22
[28] 간행물 Building a .NET App with WinRT http://dx.doi.org/10[...] Apress 2012
[29] 웹사이트 microsoft/winrt-rs https://github.com/m[...] 2021-09-28
[30] 웹사이트 microsoft/WindowsAppSDK: The Windows App SDK empowers all Windows Desktop apps with modern Windows UI, APIs, and platform features, including back-compat support, shipped via NuGet. https://github.com/m[...]
[31] 웹사이트 Ten Tips When Writing a Hybrid Language Metro style Application - Build2011 - Channel 9 http://channel9.msdn[...] Microsoft
[32] 웹사이트 Windows Phone API reference https://msdn.microso[...] Microsoft 2014-07-21
[33] 웹사이트 Windows Phone Runtime API http://msdn.microsof[...] Microsoft 2014-07-21
[34] 웹사이트 Design Details of the Windows Runtime http://www.infoq.com[...] 2011-09-21
[35] 웹사이트 Microsoft BUILD: Windows 8, A Pre-Beta Preview http://www.anandtech[...] 2011-09-13
[36] 문서 Introduction to C++/WinRT - UWP applications | Microsoft Docs https://docs.microso[...]
[37] 블로그 Official support for Windows 10 on ARM development - Windows Developer Blog https://blogs.window[...]
[38] 웹사이트 http://tirania.org/b[...]
[39] Internet Archive COM 相互運用性 - 第 1 部 : C# クライアント チュートリアル (C#) https://web.archive.[...]
[40] 웹사이트 http://social.msdn.m[...]
[41] 문서 How to: Declare Handles in Native Types | Microsoft Docs https://docs.microso[...]
[42] 웹사이트 http://channel9.msdn[...]
[43] 웹사이트 http://www.codeproje[...]
[44] 웹사이트 http://channel9.msdn[...]
[45] 문서 Windows Runtime C++ Template Library (WRL) | Microsoft Docs https://docs.microso[...]
[46] 문서 Visual Studio 2013 Compatibility | Microsoft Docs https://docs.microso[...]
[47] 문서 Develop apps for the Universal Windows Platform (UWP) - Visual Studio 2015 | Microsoft Docs https://docs.microso[...]
[48] 웹사이트 WinRT and .NET in Windows 8 (Paragraph 5) http://blogs.microso[...] 2011-10-16
[49] 웹사이트 http://www.ciprianji[...]
[50] 문서 Template ref classes (C++/CX) | Microsoft Docs https://docs.microso[...]
[51] 문서 Standard C++ data types and C++/WinRT - UWP applications | Microsoft Docs https://docs.microso[...]
[52] 문서 Interop between C++/WinRT and the ABI - UWP applications | Microsoft Docs https://docs.microso[...]
[53] 문서 Windows Runtime components with C# and Visual Basic - UWP applications | Microsoft Docs https://docs.microso[...]
[54] 웹사이트 第2回 Windowsランタイム・コンポーネントの作成とmrubyのコンパイル:連載:Windowsランタイム・コンポーネントによるコードの再利用(1/3 ページ) - @IT https://atmarkit.itm[...]
[55] 문서 Collections (C++/CX) | Microsoft Docs https://docs.microso[...]
[56] 문서 HSTRING (Hstring.h) - Win32 apps | Microsoft Docs https://docs.microso[...]
[57] 웹사이트 http://channel9.msdn[...]
[58] 웹인용 Design Details of the Windows Runtime http://www.infoq.com[...] 2011-09-21
[59] 웹인용 Microsoft BUILD: Windows 8, A Pre-Beta Preview http://www.anandtech[...] 2011-09-13
[60] 웹인용 Windows Phone API reference https://msdn.microso[...] 마이크로소프트 2014-07-21



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com