다음을 통해 공유


namespace 키워드

namespace 키워드는 관련 개체 집합을 포함하는 범위를 선언하는 데 사용됩니다. 네임스페이스를 사용하여 코드 요소를 구성하고 전역적으로 고유한 형식을 만들 수 있습니다.

namespace SampleNamespace
{
    class SampleClass { }

    interface ISampleInterface { }

    struct SampleStruct { }

    enum SampleEnum { a, b }

    delegate void SampleDelegate(int i);

    namespace Nested
    {
        class SampleClass2 { }
    }
}

‘파일 범위 네임스페이스 선언’을 사용하면 파일의 모든 형식이 단일 네임스페이스에 있음을 선언할 수 있습니다. 다음 예제는 위의 예제와 비슷하지만 파일 범위 네임스페이스 선언을 사용합니다.

using System;

namespace SampleFileScopedNamespace;

class SampleClass { }

interface ISampleInterface { }

struct SampleStruct { }

enum SampleEnum { a, b }

delegate void SampleDelegate(int i);

파일 범위 네임스페이스에서 문 사용

파일 범위 네임스페이스를 사용할 때, using 문을 어떻게 배치하느냐에 따라 파일 내의 범위에 영향을 미칩니다. 파일 범위 네임스페이스는 파일 끝에 있는 닫는 대괄호로 끝나는 동일한 기존 네임스페이스 선언보다 낮습니다. 이 동작은 다음과 같이 지시문이 적용되는 위치를 using 결정합니다.

  • using 구문이 파일 범위 네임스페이스 선언 앞에 배치되면 네임스페이스 외부로 간주되어 정규화된 네임스페이스로 해석됩니다.
  • using 문이 파일 범위 네임스페이스 선언 뒤에 위치하면, 네임스페이스 자체 내에서 범위가 지정됩니다.

예시:

// This using is outside the namespace scope, so it applies globally
using System;

namespace SampleNamespace; // File-scoped namespace declaration

// This using is inside the namespace scope
using System.Text;

public class SampleClass
{
    // Class members...
}

앞의 예제에서 System 전역적으로 액세스할 수 있지만 System.TextSampleNamespace내에서만 적용됩니다.

앞의 예제에는 중첩된 네임스페이스가 포함되지 않았습니다. 파일 범위 네임스페이스는 더 많은 네임스페이스 선언을 포함할 수 없습니다. 중첩된 네임스페이스 또는 두 번째 파일 범위 네임스페이스를 선언할 수 없습니다.

namespace SampleNamespace;

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

namespace AnotherNamespace; // Not allowed!

namespace ANestedNamespace // Not allowed!
{
   // declarations...
}

네임스페이스 내에서 다음 형식 중 0개 이상을 선언할 수 있습니다.

  • class
  • interface
  • struct
  • enum
  • delegate
  • 중첩된 네임스페이스는 파일 범위 네임스페이스 선언 내부에서를 제외하고 선언할 수 있습니다.

컴파일러는 기본 네임스페이스를 추가합니다. 전역 네임스페이스라고도 하는 이 명명되지 않은 네임스페이스는 모든 파일에 있습니다. 선언된 네임스페이스에 포함되지 않은 선언을 포함합니다. 전역 네임스페이스의 모든 식별자는 명명된 네임스페이스에서 사용할 수 있습니다.

네임스페이스에는 암시적으로 퍼블릭 액세스 권한이 있습니다. 네임스페이스의 요소에 할당할 수 있는 액세스 한정자에 대한 설명은 액세스 한정자를 참조하세요.

둘 이상의 선언에서 네임스페이스를 정의할 수 있습니다. 예를 들어 다음 예제에서는 MyCompany 네임스페이스의 일부로 두 클래스를 정의합니다.

namespace MyCompany.Proj1
{
    class MyClass
    {
    }
}

namespace MyCompany.Proj1
{
    class MyClass1
    {
    }
}

다음 예제에서는 중첩된 네임스페이스에서 정적 메서드를 호출하는 방법을 보여 줍니다.

namespace SomeNameSpace
{
    public class MyClass
    {
        static void Main()
        {
            Nested.NestedNameSpaceClass.SayHello();
        }
    }

    // a nested namespace
    namespace Nested
    {
        public class NestedNameSpaceClass
        {
            public static void SayHello()
            {
                Console.WriteLine("Hello");
            }
        }
    }
}
// Output: Hello

C# 언어 사양

자세한 내용은 C# 언어 사양네임스페이스 섹션을 참조하세요. 파일 범위 네임스페이스 선언에 대한 자세한 내용은 기능 사양을 참조하세요.

참고 항목