자동 구현 속성(Visual Basic)

자동 구현 속성을 사용하면 GetSet 속성에 코드를 작성하지 않고도 신속하게 클래스의 속성을 지정할 수 있습니다. 자동 구현 속성에 대한 코드를 작성하면 Visual Basic 컴파일러에서 관련 GetSet 프로시저가 생성될 뿐만 아니라 속성 변수를 저장하는 전용 필드가 자동으로 만들어집니다.

자동 구현 속성을 사용하면 기본값을 포함한 속성을 한 줄에 선언할 수 있습니다. 다음 예제에서는 3개의 속성 선언을 보여 줍니다.

Public Property Name As String
Public Property Owner As String = "DefaultName"
Public Property Items As New List(Of String) From {"M", "T", "W"}
Public Property ID As New Guid()

자동 구현 속성은 해당 속성 값이 전용 필드에 저장되는 속성과 동일합니다. 다음 코드 예제에서는 자동 구현 속성을 보여 줍니다.

Property Prop2 As String = "Empty"

다음 코드 예제에서는 앞의 자동 구현 속성 예제에 해당하는 코드를 보여 줍니다.

Private _Prop2 As String = "Empty"
Property Prop2 As String
    Get
        Return _Prop2
    End Get
    Set(ByVal value As String)
        _Prop2 = value
    End Set
End Property

다음 코드에서는 읽기 전용 속성 구현을 보여 줍니다.

Class Customer  
   Public ReadOnly Property Tags As New List(Of String)  
   Public ReadOnly Property Name As String = ""  
   Public ReadOnly Property File As String  
  
   Sub New(file As String)  
      Me.File = file  
   End Sub  
End Class  

예제처럼 초기화 식을 사용해 속성에 할당할 수 있습니다. 또는 포함하는 형식의 생성자에서 속성에 할당할 수 있습니다. 언제든지 읽기 전용 속성의 지원 필드에 할당할 수 있습니다.

지원 필드

자동 구현 속성을 선언하면 Visual Basic에서 속성 값을 포함하는 지원 필드라는 숨겨진 전용 필드가 자동으로 만들어집니다. 지원 필드 이름은 밑줄(_) 다음에 자동 구현 속성 이름이 나오는 형태입니다. 예를 들어 ID라는 자동 구현 속성을 선언하는 경우 지원 필드의 이름은 _ID가 됩니다. 이름이 _ID인 클래스의 멤버를 포함하는 경우 이름 충돌이 발생하며 Visual Basic에서 컴파일러 오류가 보고됩니다.

지원 필드에는 또한 다음과 같은 특징이 있습니다.

  • 속성 자체에 Public과 같은 다른 액세스 수준이 있는 경우에도, 지원 필드에 대한 액세스 한정자는 항상 Private입니다.

  • 속성이 Shared로 표시된 경우 지원 필드도 공유됩니다.

  • 속성에 대해 지정된 특성은 지원 필드에 적용되지 않습니다.

  • 클래스 내의 코드에서, 그리고 조사식 창과 같은 디버깅 도구에서 지원 필드에 액세스할 수 있습니다. 그러나 지원 필드는 IntelliSense 단어 완성 목록에 표시되지 않습니다.

자동 구현 속성 초기화

필드를 초기화하는 데 사용할 수 있는 모든 식이 자동 구현 속성을 초기화하는 데 유효합니다. 자동 구현 속성을 초기화하면 식이 계산되어 속성에 대한 Set 프로시저에 전달됩니다. 다음 코드 예제에서는 초기 값이 포함된 일부 자동 구현 속성을 보여 줍니다.

Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)

Interface의 멤버이거나 MustOverride로 표시된 자동 구현 속성은 초기화할 수 없습니다.

자동 구현 속성을 Structure의 멤버로 선언하는 경우 Shared로 표시된 자동 구현 속성만 초기화할 수 있습니다.

자동 구현 속성을 배열로 선언하는 경우 명시적 배열 범위를 지정할 수 없습니다. 그러나 다음 예에서와 같이 배열 이니셜라이저를 사용하여 값을 제공할 수 있습니다.

Property Grades As Integer() = {90, 73}
Property Temperatures As Integer() = New Integer() {68, 54, 71}

표준 구문이 요구되는 속성 정의

자동 구현 속성은 편리하며 많은 프로그래밍 시나리오를 지원합니다. 그러나 자동 구현 속성을 사용할 수 없고 대신 표준 또는 확장된 속성 구문을 사용해야 하는 경우가 있습니다.

다음 중 하나를 수행하려는 경우 확장된 속성 정의 구문을 사용해야 합니다.

  • 속성의 Get 또는 Set 프로시저에 추가합니다. 예를 들어 Set 프로시저에 들어오는 값의 유효성을 검사하는 코드를 추가합니다. 예를 들어 해당 속성 값을 설정하기 전에 전화번호를 나타내는 문자열에 필요한 수의 숫자가 포함되었는지 확인해야 할 수 있습니다.

  • GetSet 프로시저에 대해 다른 접근성을 지정합니다. Set 프로시저를 Private으로, Get 프로시저를 Public으로 만들려는 경우를 예로 들 수 있습니다.

  • WriteOnly인 속성을 만듭니다.

  • 매개 변수가 있는 속성을 사용합니다(Default 속성 포함). 속성에 대한 매개 변수를 지정하기 위해, 또는 Set 프로시저에 대해 추가 매개 변수를 지정하기 위해서는 확장된 속성을 선언해야 합니다.

  • 지원 필드에 특성을 배치하거나 지원 필드의 액세스 수준을 변경합니다.

  • 지원 필드에 대한 XML 주석을 제공합니다.

자동 구현 속성 확장명

자동 구현 속성을 Get 또는 Set 프로시저가 포함된 확장된 속성으로 변환해야 하는 경우 Visual Basic 코드 편집기는 속성에 대한 GetSet 프로시저와 End Property 문을 자동으로 생성할 수 있습니다. Property 문 다음에 있는 빈 줄에 커서를 놓고 G(Get의 경우) 또는 S(Set의 경우)를 입력한 후 ENTER를 누르면 코드가 생성됩니다. Property 문 끝에서 Enter 키를 누르면 Visual Basic 코드 편집기에서 읽기 전용 및 쓰기 전용 속성에 대한 Get 또는 Set 프로시저가 자동으로 생성됩니다.

참고 항목