Visual Basic의 네임스페이스
네임스페이스는 어셈블리에 정의된 개체를 구성합니다. 어셈블리에는 여러 개의 네임스페이스가 포함될 수 있으며, 각 네임스페이스에는 다른 네임스페이스가 포함될 수도 있습니다. 클래스 라이브러리와 같은 대형 개체 그룹을 사용할 때 네임스페이스는 모호성을 방지하고 참조를 단순화합니다.
예를 들어 .NET Framework에서는 System.Windows.Forms 네임스페이스에 ListBox 클래스를 정의합니다. 다음 코드 세그먼트는 이 클래스의 정규화된 이름을 사용하여 변수를 선언하는 방법을 보여 줍니다.
Dim LBox As System.Windows.Forms.ListBox
이름 충돌 방지
.NET Framework 네임스페이스는 때때로 클래스 라이브러리 개발자가 다른 라이브러리의 유사한 이름을 사용하여 발생하는 네임스페이스 오염 문제를 해결합니다. 기존 구성 요소와의 이러한 충돌을 이름 충돌이라고도 합니다.
예를 들어, ListBox라는 새 클래스를 만드는 경우 이 클래스를 한정자 없이 프로젝트 내부에서 사용할 수 있습니다. 그러나 같은 프로젝트에서 .NET Framework ListBox 클래스를 사용하려면 정규화된 참조를 사용하여 참조를 고유하게 만들어야 합니다. 참조가 고유하지 않으면 Visual Basic에서는 이름이 모호하다는 오류 메시지가 발생합니다. 다음 코드 예제에서는 이러한 개체를 선언하는 방법을 보여 줍니다.
' Define a new object based on your ListBox class.
Dim LBC As New ListBox
' Define a new Windows.Forms ListBox control.
Dim MyLB As New System.Windows.Forms.ListBox
다음 예제에는 두 개의 네임스페이스 계층 구조가 있으며, 모두 ListBox라는 개체를 포함하고 있습니다.
기본적으로 Visual Basic에서 만드는 모든 실행 파일에는 프로젝트와 이름이 동일한 네임스페이스가 포함됩니다. 예를 들어, ListBoxProject라는 프로젝트 내에서 개체를 정의하는 경우 실행 파일 ListBoxProject.exe는 ListBoxProject라는 네임스페이스를 포함합니다.
여러 어셈블리에 동일한 네임스페이스를 사용할 수 있으며 Visual Basic에서는 이러한 어셈블리를 단일 이름 집합으로 처리합니다. 예를 들면, Assemb1이라는 어셈블리에 있는 SomeNameSpace 네임스페이스에 대해 클래스를 정의할 수 있고 Assemb2라는 어셈블리에 있는 동일한 네임스페이스에 대해 추가 클래스를 정의할 수 있습니다.
정규화된 이름
정규화된 이름은 개체가 정의된 네임스페이스의 이름을 접두사로 사용한 개체 참조입니다. 프로젝트 메뉴에서 참조 추가를 선택하여 클래스에 대한 참조를 만든 다음, 사용자 코드에 있는 해당 개체에 정규화된 이름을 사용하면 다른 프로젝트에서 정의된 개체를 사용할 수 있습니다. 다음 코드 세그먼트는 다른 프로젝트 네임스페이스의 개체에 대해 정규화된 이름을 사용하는 방법을 보여 줍니다.
Dim LBC As New ListBoxProject.Form1.ListBox
정규화된 이름을 사용하면 컴파일러에서 사용할 개체를 항상 확인할 수 있기 때문에 이름 충돌 문제를 예방할 수 있지만 이름이 길어져 다루기 어려워질 수 있습니다. 이러한 문제를 해결하려면 Imports 문을 사용하여 정규화된 이름 대신 사용할 수 있는 약식 이름인 별칭을 정의하면 됩니다. 예를 들면, 다음 코드 예제에서는 두 개의 정규화된 이름에 대한 별칭이 만들어지고 해당 별칭을 사용하여 두 개체가 정의됩니다.
Imports LBControl = System.Windows.Forms.ListBox
Imports MyListBox = ListBoxProject.Form1.ListBox
Dim LBC As LBControl
Dim MyLB As MyListBox
별칭 없이 Imports 문을 사용할 때 해당 네임스페이스의 모든 이름이 프로젝트에서 고유한 경우 이 이름들을 한정자 없이 사용할 수 있습니다. 이름이 같은 항목이 들어 있는 네임스페이스에 대한 Imports 문이 프로젝트에 포함된 경우 해당 이름을 사용하려면 먼저 정규화해야 합니다. 예를 들어, 프로젝트에 다음 두 Imports 문이 있는 것으로 가정합니다.
' This namespace contains a class called Class1.
Imports MyProj1
' This namespace also contains a class called Class1.
Imports MyProj2
Class1을 정규화하지 않고 사용하려는 경우 Visual Basic에서는 이름 Class1이 모호하다는 오류 메시지가 발생합니다.
네임스페이스 수준 문
네임스페이스 내에서 모듈, 인터페이스, 클래스, 대리자, 열거형, 구조체 및 다른 네임스페이스 등과 같은 항목을 정의할 수 있습니다. 네임스페이스 수준에서 속성, 프로시저, 변수 및 이벤트를 정의할 수 없습니다. 이들 항목은 모듈, 구조체 또는 클래스와 같은 컨테이너 내에 선언되어야 합니다.
정규화 된 이름은 전역 키워드
중첩된 계층 구조의 네임스페이스를 정의한 경우 해당 계층 구조 내부의 코드가 차단되어 .NET Framework의 System 네임스페이스에 액세스할 수 없을 수 있습니다. 다음 예제에서는 SpecialSpace.System 네임스페이스가 System에 대한 액세스를 차단하는 계층 구조를 보여 줍니다.
Namespace SpecialSpace
Namespace System
Class abc
Function getValue() As System.Int32
Dim n As System.Int32
Return n
End Function
End Class
End Namespace
End Namespace
SpecialSpace.System은 Int32를 정의하지 않기 때문에 Visual Basic 컴파일러가 Int32에 대한 참조를 확인할 수 없습니다. Global 키워드를 사용하여 .NET Framework 클래스 라이브러리의 가장 바깥쪽 수준에서 자격 체인을 시작할 수 있습니다. 그러면 System 네임스페이스 또는 클래스 라이브러리의 다른 네임스페이스를 지정할 수 있습니다. 다음은 이에 대한 예입니다.
Namespace SpecialSpace
Namespace System
Class abc
Function getValue() As Global.System.Int32
Dim n As Global.System.Int32
Return n
End Function
End Class
End Namespace
End Namespace
Global을 사용하면 Microsoft.VisualBasic과 같은 다른 루트 수준 네임스페이스는 물론 사용자의 프로젝트에 연결된 모든 네임스페이스에 액세스할 수 있습니다.
Global 키워드가 네임 스페이스 문의
사용할 수도 있습니다의 Global 에서 키워드는 Namespace 문. 이 프로젝트의 루트 네임 스페이스의 네임 스페이스를 정의할 수 있습니다.
모든 네임 스페이스를 프로젝트에서 프로젝트의 루트 네임 스페이스를 기반으로 합니다. Visual Studio에서는 프로젝트 이름을 프로젝트의 모든 코드에 대한 기본 루트 네임스페이스로 할당합니다. 예를 들어, 프로젝트 이름이 ConsoleApplication1인 경우 프로젝트의 프로그래밍 요소는 ConsoleApplication1 네임스페이스에 속합니다. 사용자가 선언 하는 경우 Namespace Magnetosphere를 참조 하려면 Magnetosphere 프로젝트에 액세스 하는 ConsoleApplication1.Magnetosphere.
다음 예제에서는 사용은 Global 프로젝트의 루트 네임 스페이스의 네임 스페이스를 선언 하는 키워드입니다.
Namespace Global.Magnetosphere
End Namespace
Namespace Global
Namespace Magnetosphere
End Namespace
End Namespace
네임 스페이스 선언에서 Global 다른 네임 스페이스에 중첩 될 수 없습니다.
사용할 수는 프로젝트 디자이너, 응용 프로그램 페이지(Visual Basic) 보고 수정 하는 루트 네임 스페이스 프로젝트의. 새 프로젝트의 루트 네임 스페이스 기본값은 프로젝트 이름입니다. 발생할 수 Global 최상위 네임 스페이스로 하 여 지울 수 있습니다는 루트 네임 스페이스 엔트리 여 상자가 비어 있도록 합니다. 클리어 루트 네임 스페이스 필요가 있는 Global 키워드 네임 스페이스 선언에서.
경우는 Namespace 문은 또한 네임 스페이스의 이름을 선언에 있습니다.NET Framework는.NET Framework 네임 스페이스는 사용할 수 없게 됩니다 경우는 Global 키워드에서 정규화 된 이름을 사용 하지 않습니다. 에 액세스를 허용.NET Framework 네임 스페이스를 사용 하지 않고는 Global 수 있습니다 키워드를의 Global 키워드는 Namespace 문.
다음 예제는 Global 키워드는 System.Text 네임 스페이스 선언입니다.
경우는 Global 키워드 네임 스페이스 선언에 존재 하지 않습니다 StringBuilder 를 지정 하지 않고 액세스할 수 없습니다 Global.System.Text.StringBuilder. 라는 프로젝트에 대 한 ConsoleApplication1, 참조 하려면 System.Text 액세스할 수 ConsoleApplication1.System.Text 경우는 Global 키워드를 사용 했습니다.
Module Module1
Sub Main()
Dim encoding As New System.Text.TitanEncoding
' If the namespace defined below is System.Text
' instead of Global.System.Text, then this statement
' causes a compile-time error.
Dim sb As New System.Text.StringBuilder
End Sub
End Module
Namespace Global.System.Text
Class TitanEncoding
End Class
End Namespace
참고 항목
작업
방법: 명령줄을 사용하여 어셈블리 만들기 및 사용(C# 및 Visual Basic)