다음을 통해 공유


Visual Basic의 공유 멤버

업데이트: 2007년 11월

공유 멤버는 클래스 또는 구조체의 모든 인스턴스에서 공유하는 속성, 프로시저 및 필드입니다. 일부 프로그래밍 언어에서는 이러한 항목을 정적 멤버라고도 합니다.

공유 필드 및 속성

공유 필드 및 속성은 해당 정보가 클래스의 일부이지만 클래스의 특정 인스턴스에만 적용되는 것이 아닌 경우에 유용합니다. 공유 필드 및 속성의 값을 변경할 경우 클래스 및 클래스의 모든 인스턴스와 관련된 값이 변경됩니다.

반면, 특정 인스턴스와 관련된 공유되지 않는 필드 또는 속성의 값을 변경해도 클래스의 다른 인스턴스에서의 해당 필드 또는 속성의 값이 영향을 받지 않습니다. 공유되지 않는 필드 및 속성은 클래스의 각 인스턴스와는 독립적으로 존재합니다.

이와 같이 공유 필드와 속성은 클래스의 인스턴스에서만 액세스할 수 있거나 클래스 이름의 자격을 사용하여 액세스할 수 있는 전역 변수처럼 작동합니다. 공유 필드와 속성을 사용하지 않은 상태에서 동일한 결과를 얻으려면 모듈 수준 변수를 사용해야 합니다. 그러나 모듈 수준 변수를 사용하면 클래스를 이해하고 관리하기가 어려워질 수 있습니다. 또한 이러한 방법으로 모듈 수준 변수를 사용하면 클래스가 나타내는 캡슐화의 개념을 위반하게 됩니다.

공유 프로시저

공유 프로시저는 클래스의 인스턴스 전체에 관련되는 클래스 메서드입니다. 예를 들어, Math 클래스에 정의한 Cos 메서드는 공유 메서드입니다. 공유 프로시저는 개체의 메서드로서 호출하거나 클래스에서 직접 호출할 수 있습니다.

공유 프로시저 및 속성은 클래스의 인스턴스에 액세스할 수 없습니다. 따라서 공유 메서드에서는 공유되지 않는 데이터 멤버에 대한 정규화된 참조만 허용됩니다.

참고:

클래스의 인스턴스를 통해 공유 멤버에 액세스하는 코드를 작성하지 않는 것이 좋습니다. 이러한 코드를 작성하면 컴파일러가 공유 멤버의 자격을 무시하고 클래스를 통해 이 공유 멤버에 직접 액세스하는 것처럼 처리합니다. 경우에 따라서는 정규화 개체에서 일부 코드를 실행하기를 원할 수 있으므로 Visual Basic 컴파일러에서는 클래스의 인스턴스를 통해 공유 멤버에 액세스하려는 경우 경고를 생성합니다. IntelliSense는 클래스의 인스턴스에 대한 공유 멤버를 표시하지 않습니다.

공유 멤버 예제

다음 예제에서는 공유 필드, 두 개의 인스턴스 필드 및 공유 메서드를 만들어 코드에서 해당 공유 멤버들이 어떻게 적용되는지를 보여 줍니다.

Public Class Item
    Public Shared Count As Integer = 1
    Public Shared Sub ShareMethod()
        MsgBox("Current value of Count: " & Count)
    End Sub

    Public Sub New(ByVal Name As String)
        ' Use Count to initialize SerialNumber.
        Me.SerialNumber = Count
        Me.Name = Name
        ' Increment the shared variable
        Count += 1
    End Sub
    Public SerialNumber As Integer
    Public Name As String
    Public Sub InstanceMethod()
        MsgBox("Information in the first object: " & _
            Me.SerialNumber & vbTab & Me.Name)
    End Sub
End Class

Sub TestShared()
    ' Create two instances of the class.
    Dim part1 As New Item("keyboard")
    Dim part2 As New Item("monitor")

    part1.InstanceMethod()
    part2.InstanceMethod()
    Item.ShareMethod()
End Sub

TestShared 프로시저를 실행하면 두 개의 클래스 인스턴스가 만들어집니다. 생성자는 공유 필드 Count를 사용하여 인스턴스 필드 SerialNumber를 초기화한 다음 Count를 늘립니다. 이 기술은 다른 일련 번호를 각 인스턴스에 자동으로 제공합니다.

두 개의 인스턴스가 만들어진 후 인스턴스 메서드 InstanceMethod가 두 개체에서 호출되고 공유 메서드 ShareMethod도 호출됩니다. 출력 결과는 다음과 같습니다.

Information in the first object: 1 keyboard

Information in the second object: 2 monitor

Current value of the shared Count field: 3

참고 항목

개념

구조체와 클래스

참조

Dim 문(Visual Basic)

Cos

기타 리소스

Class 속성, 필드, 메서드

구조체: 사용자 지정 데이터 형식