> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# GameInput API 버전 관리

> GameInput API 버전 관리

<a id="introductionSection" />

<Note>XBOX용으로 개발하는 경우, 버전 v.0은 2510 GDK부터 GDK에서 기본으로 제공되는 버전입니다. v1.0+ API를 활용하는 타이틀은 [Microsoft.GameInput](https://www.nuget.org/packages/Microsoft.GameInput) NuGet 패키지와 통합하여 PC(v1.0+)와 콘솔(v2.2+) 모두에서 이를 사용할 수 있습니다. 콘솔에서 이 NuGet 패키지를 사용하려면 GDK 2510 이상이 필요합니다. PC 앱은 NuGet 패키지에 포함된 최신 GameInput 재배포 가능 패키지가 대상 컴퓨터에 설치되어 있어야 합니다. 콘솔 앱은 NuGet 패키지의 최신 GameInput 헤더 및 라이브러리로 컴파일하고 링크해야 하지만, XBOX의 GDK 이미지에 최신 GameInput 런타임이 포함되어 있으므로 재배포 가능 패키지는 필요하지 않습니다.</Note>

GameInput은 새 기능이 추가되고 필요하지 않거나 오래된 기능이 제거되면서 시간이 지남에 따라 계속 진화하는 살아 있는 API입니다. GameInput의 최신 버전은 공식 [NuGet 패키지](/build/core-features/common/input/overviews/input-nuget)에서 찾을 수 있습니다. 이 패키지에는 최신 [버전 기록](https://www.nuget.org/packages/Microsoft.GameInput)도 포함되어 있습니다. 이 패키지에는 항상 타이틀에 포함할 최신 GameInput 헤더, 바이너리, 재배포 가능 패키지가 포함되어 있습니다.

새 버전의 GameInput으로 업그레이드하는 것은 빠르고 번거롭지 않습니다. 또한 최신 GameInput 헤더에 설명된 API에 관계없이, 이전 버전의 GameInput으로 컴파일된 애플리케이션에 대해 바이너리 및 기능적 호환성이 유지됩니다. 이 모델에서는 이미 출시된 게임도 GameInput의 개선 사항을 누릴 수 있고, 필요하다면 새 기능을 활용하기 위해 최신 GameInput 버전으로 전환할 수 있습니다.

## 런타임과 API 버전 업그레이드

<a id="upgradingRuntimeAndApiVersionSection" />

GameInput의 여러 버전은 유사해 보이는 이름과 메서드를 가지고 있지만, 서로 다른 UUID로 명확히 버전이 구분됩니다. GameInput API v.1부터 각 버전은 고유한 네임스페이스(예: `GameInput::v1`)에 정의됩니다. GameInput의 동일한 기반 객체가 이러한 인터페이스를 구현합니다. [QueryInterface](https://learn.microsoft.com/cpp/atl/queryinterface)를 사용하여 버전 간에 전환할 수 있으며, 이는 원한다면 게임에서 API 사용을 혼합할 수 있음을 의미합니다.

전역 네임스페이스에 API가 정의되어 있던 GameInput v.0에서 업그레이드하는 경우, `using namespace GameInput::v1` 문을 추가하면 v.1 및 이후 API 개정 채택을 위해 업데이트해야 하는 GameInput 호출 지점 수를 줄이는 데 도움이 될 수 있습니다.

런타임 버전 확인 외에도, `GAMEINPUT_API_VERSION` 전처리기 정의를 확인하여 조건부 컴파일을 사용할 수 있습니다. 이 정의는 현재 사용 중인 GameInput API 버전과 GameInput 메이저 버전에 해당합니다. v.0 API에는 이 정의가 없었으므로, 이 버전을 조건부로 테스트하려면 GameInput 헤더 포함 뒤에 다음 스니펫을 추가할 수 있습니다.

```cpp theme={null}
#ifndef GAMEINPUT_API_VERSION
#define GAMEINPUT_API_VERSION 0
#endif
```

## 런타임만 업그레이드

<a id="upgradingRuntimeSection" />

GameInput을 사용하면 API 사용을 업데이트하지 않고도 최신 버그 수정을 받을 수 있습니다. 이러한 버그 수정을 받으려면 최신 [Microsoft.GameInput](https://www.nuget.org/packages/Microsoft.GameInput) NuGet 패키지에 번들된 GameInput 재배포 가능 패키지를 설치하세요. GameInput은 이전 API 버전과의 바이너리 호환성을 유지하므로, 새 런타임과 함께 기존 헤더를 계속 사용할 수 있습니다. 테스트 환경의 기능이 프로덕션과 일관되도록 최신 GameInput 바이너리를 타이틀과 함께 재배포하는 것을 잊지 마세요.

## GameInput v.1 변경 사항

이전 버전의 GameInput을 사용 중이라면, 구현되지 않은 많은 함수와 그에 대응하는 열거형 및 상수가 v.1 API부터 제거된다는 점에 유의하세요.
또한 API는 버전 관리를 용이하게 하기 위해 `GameInput::v1` 네임스페이스에 배치됩니다.
이러한 변경 사항으로 인해 이 버전(및 이후 버전)을 사용하여 코드를 빌드할 때 컴파일 오류가 발생할 수 있습니다.
주요 변경 사항은 다음과 같습니다.

1. `IGameInputDevice::GetDeviceInfo`는 이전에는 함수의 반환 값으로 결과 `IGameInputDeviceInfo` 구조체를 반환했습니다. 이 구조체는 이제 함수의 출력 매개 변수로 반환되며, 함수의 반환 값은 이제 `HRESULT`입니다.

2. `IGameInput::UnregisterCallback`은 이전에 두 번째 매개 변수로 시간 초과 값을 받았지만, 이 매개 변수는 제거되었습니다.

3. `IGameInputReading::GetSequenceNumber`가 제거되었습니다. 대신 `IGameInputReading::GetTimestamp`를 사용하세요.

## 버전 관리 팁

* v.0과 v.1 사이의 사용 가능한 API 표면 변경은 최소한이며, 결코 구현되지 않았던 기능이 제거되었고, 앞서 설명한 함수 시그니처 변경이 이루어졌습니다.
* 원래의 `GameInput.h` 헤더의 원본 v.0 API는 계속 지원되지만, 해당 API는 정적으로 유지됩니다. 이 경우 GDK, 이전 NuGet 패키지 또는 Windows SDK에서 있는 그대로 헤더를 계속 사용하면 됩니다.
* 어떤 버전의 API를 사용하든, 개발 중에 [NuGet 패키지](/build/core-features/common/input/overviews/input-nuget)의 최신 재배포 가능 패키지를 설치해야 하며, 해당 재배포 가능 패키지(또는 그 이상)를 게임의 최종 사용자 설치 프로세스의 일부로 포함해야 합니다. 이 재배포 가능 패키지에는 최신 GameInput 런타임 구현이 있으며, 확장된 컨트롤러 지원, 트랙패드 지원, 원격 데스크톱 지원 및 기타 다양한 버그 수정과 같은 개선 사항으로 모든 API 버전을 향상시킵니다.

## 함께 보기

<a id="seeAlsoSection" />

[GameInput NuGet 패키지](/build/core-features/common/input/overviews/input-nuget)


## Related topics

- [GameInput 자주 묻는 질문](/ko/build/core-features/common/input/overviews/input-faq.md)
- [사용되지 않는 GameInput API 멤버](/ko/reference/input/gameinput/deprecated/gameinput_deprecated_members.md)
- [개요](/ko/build/core-features/common/input/overviews/index.md)
- [GameInput](/ko/reference/input/gameinput/gameinput_members.md)
- [GameInput 개요](/ko/build/core-features/common/input/overviews/input-overview.md)
