네임스페이스 사용(C# 프로그래밍 가이드)

네임스페이스는 C# 프로그램에서 다음 두 가지 방식으로 중요하게 사용됩니다. 우선 .NET Framework 클래스에서는 네임스페이스를 사용하여 많은 자체 클래스를 조직화합니다. 또한 대규모 프로그래밍 프로젝트에서 클래스와 메서드 이름의 범위를 쉽게 제어할 수 있도록 고유한 네임스페이스를 정의하기도 합니다.

네임스페이스 액세스

대부분의 C# 응용 프로그램은 using 지시문 섹션으로 시작합니다. 이 섹션에는 응용 프로그램에서 자주 사용하는 네임스페이스가 나열됩니다. 프로그래머는 여기에 포함된 메서드를 사용할 때마다 정규화된 이름을 지정할 필요가 없습니다.

예를 들어, 다음과 같은 줄을 포함할 수 있습니다.

using System;

이 경우 프로그램 시작 단계에서 다음과 같은 코드를 사용할 수 있습니다.

Console.WriteLine("Hello, World!");

using 지시문이 없으면 동일한 결과를 얻기 위해 다음 코드를 사용해야 합니다.

System.Console.WriteLine("Hello, World!");

네임스페이스 별칭

using 지시문(C# 참조)을 사용하여 네임스페이스의 별칭을 만들 수도 있습니다. 예를 들어, 중첩된 네임스페이스가 들어 있는 이전에 작성된 네임스페이스를 사용하는 경우 다음 예제와 같이 특정 네임스페이스를 간단하게 참조할 수 있도록 별칭을 선언할 수 있습니다.

using Co = Company.Proj.Nested;  // define an alias to represent a namespace

네임스페이스를 사용하여 범위 제어

namespace 키워드는 범위를 선언하는 데 사용됩니다. 프로젝트 내에서 범위를 만들면 코드를 쉽게 구성할 수 있고 전역적으로 고유한 형식을 만들 수 있습니다. 다음 예제에서는 SampleClass라는 클래스를 두 네임스페이스에 정의하며, 네임스페이스 하나는 다른 네임스페이스 내에 중첩되어 있습니다. . 연산자(C# 참조)는 호출되는 메서드를 구분하는 데 사용됩니다.

namespace SampleNamespace
{
    class SampleClass
    {
        public void SampleMethod()
        {
            System.Console.WriteLine(
              "SampleMethod inside SampleNamespace");
        }
    }

    // Create a nested namespace, and define another class.
    namespace NestedNamespace
    {
        class SampleClass
        {
            public void SampleMethod()
            {
                System.Console.WriteLine(
                  "SampleMethod inside NestedNamespace");
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // Displays "SampleMethod inside SampleNamespace."
            SampleClass outer = new SampleClass();
            outer.SampleMethod();

            // Displays "SampleMethod inside SampleNamespace."
            SampleNamespace.SampleClass outer2 = new SampleNamespace.SampleClass();
            outer2.SampleMethod();

            // Displays "SampleMethod inside NestedNamespace."
            NestedNamespace.SampleClass inner = new NestedNamespace.SampleClass();
            inner.SampleMethod();
        }
    }
}

정규화된 이름

네임스페이스와 형식은 고유한 이름을 갖습니다. 이 이름은 논리 계층 구조를 나타내는 정규화된 이름으로 표시됩니다. 예를 들어, A.B 문은 A가 네임스페이스나 형식의 이름이고 B가 그 안에 중첩되어 있음을 의미합니다.

다음 예제에는 중첩된 클래스 및 네임스페이스가 있습니다. 정규화된 이름은 각 엔터티 다음에 나오는 주석에 표시되어 있습니다.

namespace N1     // N1
{
    class C1      // N1.C1
    {
        class C2   // N1.C1.C2
        {
        }
    }
    namespace N2  // N1.N2
    {
        class C2   // N1.N2.C2
        {
        }
    }
}

다음은 위 코드 세그먼트의 요소에 대한 설명입니다.

  • N1 네임스페이스는 전역 네임스페이스의 멤버입니다. 정규화된 이름은N1입니다.

  • N2 네임스페이스는 N1의 멤버입니다. 정규화된 이름은 N1.N2입니다.

  • C1 클래스는 N1의 멤버입니다. 정규화된 이름은 N1.C1입니다.

  • 이 코드에서는 클래스 이름 C2가 두 번 사용됩니다. 그러나 정규화된 이름은 고유합니다. C2의 첫 번째 인스턴스는 C1 내부에서 선언되므로 정규화된 이름은 N1.C1.C2입니다. C2의 두 번째 인스턴스는 N2 네임스페이스 내부에서 선언되므로 정규화된 이름은 N1.N2.C2입니다.

위의 코드 세그먼트를 사용하여 다음과 같이 N1.N2 네임스페이스에 새 클래스 멤버 C3을 추가할 수 있습니다.

namespace N1.N2
{
    class C3   // N1.N2.C3
    {
    }
}

일반적으로 ::을 사용하여 네임스페이스 별칭을 참조하거나 global::을 사용하여 전역 네임스페이스를 참조하고 .을 사용하여 형식이나 멤버를 한정합니다.

네임스페이스 대신 형식을 참조하는 별칭과 함께 ::을 사용하면 오류가 발생합니다. 예를 들면 다음과 같습니다.

using Alias = System.Console;
class TestClass
{
    static void Main()
    {
        // Error
        //Alias::WriteLine("Hi");

        // OK
        Alias.WriteLine("Hi");
    }
}

global이라는 단어는 미리 정의된 별칭이 아니라는 점에 주의해야 합니다. 따라서 global.X에는 특별한 의미가 없습니다. 이는 ::과 함께 사용할 때만 특별한 의미를 갖습니다.

global::은 항상 전역 네임스페이스를 참조하며 별칭이 아니므로 global이라는 별칭을 정의하면 컴파일러 경고 CS0440이 발생합니다. 예를 들어, 다음과 같은 줄을 사용하면 경고가 발생합니다.

using global = System.Collections;   // Warning

의도하지 않은 추가 형식이 사용되지 않도록 방지하기 위해서는 ::을 별칭과 함께 사용하는 것이 좋습니다. 예를 들어, 다음과 같은 예제를 생각해 볼 수 있습니다.

using Alias = System;
namespace Library
{
    public class C : Alias.Exception { }
}

이 예제는 작동은 하지만 Alias라는 형식을 추가로 도입하면 Alias.가 해당 형식에 대신 바인딩됩니다. Alias::Exception을 사용하면 Alias가 형식으로 잘못 인식되지 않고 네임스페이스 별칭으로 취급되도록 할 수 있습니다.

global 별칭에 대한 자세한 내용은 방법: 전역 네임스페이스 별칭 사용(C# 프로그래밍 가이드) 항목을 참조하십시오.

참고 항목

참조

네임스페이스(C# 프로그래밍 가이드)

네임스페이스 키워드(C# 참조)

. 연산자(C# 참조)

:: 연산자(C# 참조)

extern(C# 참조)

개념

C# 프로그래밍 가이드