내보내기(0) 인쇄
모두 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

전처리기 지시문을 사용한 조건부 컴파일

2014-06-18

적용 대상: Windows Phone 8 및 Windows Phone Silverlight 8.1 | Windows 8

 

이 항목에서는 조건부 컴파일 및 Windows Phone 8/Windows 8 용 앱을 빌드할 때 조건부 컴파일을 사용하는 방법에 대해 설명합니다.

이 항목에는 다음 단원이 포함되어 있습니다.

 

조건부 컴파일은 코드의 여러 부분을 컴파일하고 다른 부분을 무시하도록 하는 컴파일러 지시문을 정의하는 프로세스입니다. 이 기술을 플랫폼 간 개발 시나리오에서 사용하여 특정 플랫폼에 관련하여 컴파일되는 코드의 부분을 지정할 수 있습니다.

다음 예제에서는 C#에서 #if…#else…#endif 지시문을 사용하여 네임스페이스를 조건부로 포함하는 방법을 보여 줍니다.


#if CONDITION
using Conditional.Namespace;
#else
using Another.Namespace;
#endif

조건의 값에 따라 포함되는 네임스페이스가 결정됩니다.

CONDITION이 설정된 경우

using Conditional.Namespace;

CONDITION이 설정되지 않은 경우

using Another.Namespace;

다음 예제에서는 조건부 컴파일 기호가 설정되었는지 여부에 따라 서로 다른 코드를 컴파일에서 프로그램을 변경하는 방법을 보여 줍니다.


public double MyMethod(int input)
{
    double result;
 
    #if CONDITION
    result = input * 0.6;
    #else
    result = input * 0.45;
    #endif
 
    return result;
}

조건의 값에 따라 기능이 결정됩니다.

CONDITION이 설정된 경우

result = input * 0.6;

CONDITION이 설정되지 않은 경우

result = input * 0.45;

비슷한 지시문을 다른 언어에 사용할 수 있습니다. 조건부 컴파일에 대한 자세한 내용은 C# 전처리기 지시문Visual Basic의 조건부 컴파일을 참조하세요.

이 기술을 사용하면 조건부로 컴파일된 블록에서 플랫폼 특정 코드를 격리할 수 있으므로 원할 때마다 이 방법을 사용할 수 있습니다. 하지만 이 기술만 사용하여 코드를 공유하는 경우에는 시간이 경과하면서 코드베이스를 관리하지 못하게 될 수 있습니다. 이 기술은 코드 경로에 작고 분명한 플랫폼 차이점이 있고 이러한 차이점을 자체 클래스, 메서드, 프로젝트 또는 솔루션으로 격리하지 않으려는 경우 매우 유용합니다. 이식 가능한 클래스 라이브러리의 목적은 한 번 빌드하고 선택한 플랫폼에서 사용하는 것이므로 이식 가능한 클래스 라이브러리에서는 조건부 컴파일을 사용하는 코드를 공유할 수 없습니다.

이는 다른 모든 항목이 플랫폼에 특정하지 않을 수 있는 경우 플랫폼 특정 코드를 정의하는 매우 간단한 방법입니다. 예를 들어 Windows Phone 8 및 Windows 스토어 앱에 대한 코드베이스를 공유하고 컴파일 중인 앱 또는 플랫폼에 따라 설정할 수 있는 조건으로 플랫폼 특정 코드를 둘러싸서 각 플랫폼에 대해 코드가 동작하는 방식을 변경할 수 있습니다. 다음 예제에서는 PlatformSpecificMethod의 코드가 각 플랫폼에 대해 다르게 컴파일되도록 컴파일러 지시문을 사용합니다.


namespace ProjectB
{
    public class MyClass
    {
        public void CommonMethodA()
        {
            // code that is common to Windows Phone 8 and Windows 8
        }
 
        public int CommonMethodB()
        {
            int result = 0;
 
            // code that is common to Windows Phone 8 and Windows 8
 
            return result;
        }
 
        public void PlatformSpecificMethod()
        {
            #if NETFX_CORE
            // code for Windows 8
            #else
            // code for Windows Phone 8
            #endif
        }
    }
}

Visual Studio Express 2012 for Windows 8 로 만들어진 Windows 8 프로젝트에는 이미 NETFX_CORE라는 컴파일러 지시문 집합이 있습니다. 따라서 이 항목이 설정된 경우 프로젝트는 Windows 8 프로젝트입니다. 이전 코드에 표시된 대로 이 정보를 사용하여 PlatformSpecificMethod를 조건부로 컴파일합니다. 이 방법은 코드를 공유하지만 클래스 내부에 플랫폼 특정 코드를 포함하는 간단한 방법입니다.

표시:
© 2014 Microsoft