Namespace 문

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

구문

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

부분

전역 선택 사항. 프로젝트의 루트 네임스페이스에서 네임스페이스를 정의할 수 있습니다. Visual Basic의 네임스페이스를 참조하세요.

name 필수입니다. 네임스페이스를 식별하는 고유 이름입니다. 유효한 Visual Basic 식별자여야 합니다. 자세한 내용은 선언된 요소 이름을 참조하세요.

componenttypes 선택 사항입니다. 네임스페이스를 구성하는 요소입니다. 여기에는 열거형, 구조체, 인터페이스, 클래스, 모듈, 대리자 및 기타 네임스페이스가 포함되지만 이에 국한되지는 않습니다.

End NamespaceNamespace 블록을 종료합니다.

설명

네임스페이스는 조직 시스템으로 사용됩니다. 이는 다른 프로그램 및 애플리케이션에 노출되는 프로그래밍 요소를 분류하고 표시하는 방법을 제공합니다. 네임스페이스는 클래스나 구조체와 같은 형식이 아닙니다. 프로그래밍 요소가 네임스페이스의 데이터 형식을 갖도록 선언할 수 없습니다.

Namespace 문 다음에 선언된 모든 프로그래밍 요소는 해당 네임스페이스에 속합니다. Visual Basic은 End Namespace 문이나 다른 Namespace 문을 발견할 때까지 마지막으로 선언된 네임스페이스로 요소를 계속 컴파일합니다.

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

파일 또는 네임스페이스 수준에서만 Namespace 문을 사용할 수 있습니다. 이는 네임스페이스의 선언 컨텍스트가 원본 파일이나 다른 네임스페이스여야 하며 클래스, 구조체, 모듈, 인터페이스 또는 프로시저일 수 없음을 의미합니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하세요.

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

액세스 수준

네임스페이스는 Public 액세스 수준이 있는 것처럼 처리됩니다. 네임스페이스는 동일한 프로젝트의 코드, 프로젝트를 참조하는 다른 프로젝트 및 프로젝트에서 빌드된 모든 어셈블리에서 액세스할 수 있습니다.

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

루트 네임스페이스

프로젝트의 모든 네임스페이스 이름은 루트 네임스페이스를 기반으로 합니다. Visual Studio는 프로젝트 이름을 프로젝트의 모든 코드에 대한 기본 루트 네임스페이스로 할당합니다. 예를 들어 프로젝트 이름이 Payroll이면 해당 프로그래밍 요소는 해당 네임스페이스 Payroll에 속합니다. Namespace funding을 선언하는 경우 해당 네임스페이스의 전체 이름은 Payroll.funding입니다.

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

또는 Global 키워드를 사용하여 프로젝트 외부에 정의된 네임스페이스 요소를 참조할 수 있습니다. 이렇게 하면 프로젝트 이름을 루트 네임스페이스로 보존할 수 있습니다. 이렇게 하면 프로그래밍 요소를 기존 네임스페이스의 요소와 실수로 병합할 가능성이 줄어듭니다. 자세한 내용은 Visual Basic의 네임스페이스에서 "정규화된 이름의 전역 키워드" 섹션을 참조하세요.

Global 키워드는 Namespace 문에서도 사용할 수 있습니다. 이렇게 하면 프로젝트의 루트 네임스페이스에서 네임스페이스를 정의할 수 있습니다. 자세한 내용은 Visual Basic의 네임스페이스에서 "Namespace 문의 전역 키워드" 섹션을 참조하세요.

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

특성 및 한정자

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

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

예 1

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

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

예제 2

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

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

예 3

다음 예에서는 이전 예에서 정의된 클래스에 액세스합니다.

Dim instance As New n1.n2.a

예시 4

다음 예에서는 새로운 제네릭 목록 클래스의 뼈대를 정의하고 이를 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

참고 항목