다음을 통해 공유


Namespace 문

업데이트: 2007년 11월

네임스페이스 이름을 선언하고 선언 뒤에 오는 소스 코드가 해당 네임스페이스 내에서 컴파일되도록 합니다.

Namespace { name | name.name }
    [ componenttypes ]
End Namespace

구성 요소

  • name
    필수적 요소이며 네임스페이스를 식별하는 고유 이름입니다. 올바른 Visual Basic 식별자여야 합니다. 자세한 내용은 선언 요소 이름을 참조하십시오.

  • componenttypes
    선택적 요소이며 네임스페이스를 구성하는 요소입니다. 이러한 요소로는 열거형, 구조체, 인터페이스, 클래스, 모듈, 대리자 및 다른 네임스페이스가 있지만 이에 제한되지는 않습니다.

  • End Namespace
    Namespace 블록을 끝냅니다.

설명

네임스페이스는 구성 체계로 사용됩니다. 네임스페이스는 다른 프로그램 및 응용 프로그램에 노출된 프로그래밍 요소를 분류 및 표시하는 방법을 제공합니다. 네임스페이스는 클래스 또는 구조체와 같은 의미의 형식이 아니므로 프로그래밍 요소가 네임스페이스 형식의 데이터를 갖도록 선언할 수 없습니다.

Namespace 문은 파일 또는 네임스페이스 수준에서만 사용할 수 있습니다. 즉, 네임스페이스에 대한 선언 컨텍스트는 소스 파일 또는 다른 네임스페이스이어야 하며 클래스, 구조체, 모듈, 인터페이스 또는 프로시저일 수 없습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하십시오.

네임스페이스는 Public 액세스 수준을 갖는 것으로 취급됩니다. 네임스페이스는 같은 프로젝트 내의 임의의 위치에 있는 코드, 해당 프로젝트를 참조하는 다른 프로젝트 및 해당 프로젝트에서 빌드된 어셈블리에서 액세스할 수 있습니다.

규칙

  • 특성특성을 네임스페이스에 적용할 수 없습니다. 특성은 정보를 어셈블리 메타데이터에 제공하므로 네임스페이스와 같은 소스 분류자에는 의미가 없습니다.

  • **한정자.**네임스페이스에는 액세스 한정자나 프로시저 한정자 또는 다른 한정자를 적용할 수 없습니다. 네임스페이스는 형식이 아니므로 이러한 한정자는 의미가 없습니다.

  • **중첩.**네임스페이스 내에 다른 네임스페이스 한 개를 선언할 수 있습니다. 선언 가능한 중첩 수준에 대한 엄격한 제한은 없지만, 다른 코드에서 가장 안쪽에 있는 네임스페이스에서 선언된 요소에 액세스하는 경우 이 코드에서는 중첩 계층의 모든 네임스페이스 이름을 포함하는 한정 문자열을 사용해야 합니다.

동작

  • 액세스 수준. 다른 요소의 내부가 아닌 네임스페이스 내부를 의미하는 네임스페이스 수준에서 선언된 프로그래밍 요소는 Public 또는 Friend 액세스를 가질 수 있습니다. 이러한 요소의 액세스 수준에는 별도로 지정하지 않은 경우 기본적으로 Friend가 사용됩니다. 네임스페이스 수준에서 선언할 수 있는 요소에는 클래스, 구조체, 모듈, 인터페이스, 열거형 및 대리자가 있습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하십시오.

  • **컴파일.**Namespace 문 뒤에 오는 모든 선언된 프로그래밍 요소는 해당 네임스페이스에 속합니다. Visual Basic에서는 마지막으로 선언된 네임스페이스가 End Namespace 문 또는 Namespace 문을 만날 때까지 마지막으로 선언된 네임스페이스로 요소를 컴파일합니다.

  • **네임스페이스에 추가.**프로젝트 외부에서도 네임스페이스가 이미 정의되어 있는 경우 해당 네임스페이스에 프로그래밍 요소를 추가할 수 있습니다. 이렇게 하려면 Namespace 문을 사용하여 Visual Basic에서 다음 요소를 해당 네임스페이스로 컴파일하도록 합니다.

    다음 예제에서는 새 제네릭 목록 클래스의 구조를 정의하여 System.Collections.Generic 네임스페이스에 추가합니다.

    Namespace System.Collections.Generic
        Class specialSortedList(Of T)
            Inherits List(Of T)
            ' Insert code to define the special generic list class.
        End Class
    End Namespace
    
  • **루트 네임스페이스.**프로젝트의 모든 네임스페이스 이름은 루트 네임스페이스를 기반으로 합니다. Visual Studio에서는 프로젝트 이름을 프로젝트의 모든 코드에 대한 기본 루트 네임스페이스로 할당합니다. 예를 들어, 프로젝트 이름이 Payroll인 경우 프로젝트의 프로그래밍 요소는 Payroll 네임스페이스에 속합니다. Namespace funding을 선언하는 경우 해당 네임스페이스의 전체 이름은 Payroll.funding입니다.

    제네릭 목록 클래스 예제와 같이 Namespace 문의 기존 네임스페이스를 지정하려면 루트 네임스페이스를 null 값으로 설정합니다. 이렇게 하려면 프로젝트 메뉴에서 프로젝트 속성을 클릭한 다음 루트 네임스페이스 항목을 제거하여 상자가 비어 있도록 합니다. 제네릭 목록 클래스 예제에서 이렇게 하지 않은 경우 Visual Basic 컴파일러는 Payroll 프로젝트 내에서 System.Collections.Generic을 새 네임스페이스로 사용하며 전체 이름은 Payroll.System.Collections.Generic입니다.

    또는 Global 키워드를 사용하여 프로젝트 외부에서 정의된 네임스페이스의 요소를 참조할 수도 있습니다. 이렇게 하면 프로젝트 이름을 루트 네임스페이스로 유지할 수 있습니다. 그러면 본의 아니게 프로그래밍 요소를 기존 네임스페이스 요소와 병합할 가능성을 줄일 수 있습니다.

문제 해결

  • **정의되지 않은 형식.**루트 네임스페이스에서 예기치 않게 네임스페이스 이름을 연결할 수 있습니다. 프로젝트 외부에서 정의된 네임스페이스를 참조하는 경우 Visual Basic 컴파일러는 해당 네임스페이스를 루트 네임스페이스 내에서 중첩된 네임스페이스로 해석할 수 있습니다. 이러한 경우 컴파일러는 외부 네임스페이스에서 이미 정의된 형식을 인식하지 않습니다. 이러한 문제를 방지하려면 루트 네임스페이스를 "루트 네임스페이스"에서 설명한 null 값으로 설정하거나 Global 키워드를 사용하여 외부 네임스페이스의 요소에 액세스합니다.

예제

다음 예제에서는 네임스페이스 내에서 다른 네임스페이스 하나가 중첩되는 두 개의 네임스페이스를 선언합니다.

Namespace n1
    Namespace n2
        Class a
            ' Insert class definition.
        End Class
    End Namespace
End Namespace

다음 예제에서는 한 줄에 여러 개의 중첩된 네임스페이스를 선언하며 앞의 예제와 동일합니다.

Namespace n1.n2
    Class a
        ' Insert class definition.
    End Class
End Namespace

다음 예제에서는 앞의 예제에서 정의한 클래스에 액세스합니다.

Dim instance As New n1.n2.a

참고 항목

개념

선언 요소 이름

Visual Basic의 네임스페이스

참조

Imports 문(.NET 네임스페이스 및 형식)

Global